點選上方“Python爬蟲與資料挖掘”,進行關注
回複“書籍”即可獲贈Python從入門到進階共10本電子書
今
日
雞
湯
不寝聽金鑰,因風想玉珂。
大家好,我是Python進階者。
一、前言
前幾天在Python白銀交流群【HugoLB】分享了一個
playwright
網絡爬蟲利器,如下圖所示。

感覺挺有意思,上手難度也不算太大,這裡整理一份小教程分享給大家,後面遇到正常爬不動的網站,不妨試試看這個利器,興許會事半功倍哦!
二、實作過程
這裡使用新發地網站做一個簡單的示例,新發地網站最開始的時候是
get
請求,去年的時候開始使用
post
請求方式,網頁發生了變化,其實你正常使用網絡爬蟲的正常方式,也是可以擷取到資料的,而且效率也很高,這裡我是為了給大家做一個
playwright
網絡爬蟲示例,拿這個網站小試下牛刀。言歸正傳,一起來看看吧!
新發地網站的首頁如下圖所示:
進入網頁之後,可以看到網頁的
url
,然後點選右側的
檢視更多
,即可進入到詳情頁,如下圖所示:
此時可以看得到更多的資料量了,這裡隻是用一兩個頁面做一個示例,更多的頁面等大家自己去挖掘。
啟動浏覽器抓包,點選網頁的下一頁,可以看到響應資料如下圖所示:
此時的請求參數如下圖所示:
依次再點選下一頁,可以看到
Request URL
是不變的,變化的是
Payload
裡邊的
current
參數。
此時的請求參數如下圖所示:
那麼到這裡的話,網頁變化的規律其實已經很明顯了,接下來我們隻需要上
playwright
代碼就行了,代碼架構是固定的,隻需要更改兩個
url
即可,第一個是首頁的
url
,第二個就是響應資料的
response.url
,具體的代碼如下所示:
from playwright.sync_api import Playwright, sync_playwright
import datetime
from pprint import pprint
import traceback
import logging
from tqdm import tqdm
import json
# pip install playwright,然後終端 playwright install
"""
先用playwright寫一個普通的登入網站代碼,然後page.goto前面加上
page.on("request", lambda request: handle(request=request, response=None))
page.on("response", lambda response: handle(response=response, request=None))
然後可以寫一個handle自定義函數,args為response和request,然後後面想怎麼處理資料都可以
"""
# setup logging
logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s', level=logging.INFO)
def handle_json(json):
# process our json data
# print(json)
for i in range(20):
data_list = json['list'][i]
# print(data_list)
id = data_list['id']
prodName = data_list['prodName']
prodCat = data_list['prodCat']
place = data_list['place']
print(id, prodName, prodCat, place)
def handle(request, response):
if response is not None:
# response url 是網站請求資料的url
if response.url == 'http://www.xinfadi.com.cn/getPriceData.html':
handle_json(response.json())
def run(playwright: Playwright) -> None:
browser = playwright.chromium.launch(headless=False)
context = browser.new_context(ignore_https_errors=True)
# Open new page
page = context.new_page()
page.on("request", lambda request: handle(request=request, response=None))
page.on("response", lambda response: handle(response=response, request=None))
# url是網頁加載的URL
url = 'http://www.xinfadi.com.cn/index.html'
page.goto(url)
# 然後之前看到有說道網站動态加載,拖動的問題。playwright可以直接用page.mouse.wheel(0, 300)解決
page.wait_for_timeout(50000)
# ---------------------
context.close()
page.close()
browser.close()
with sync_playwright() as playwright:
run(playwright)
運作之後的結果如下所示:
可以看到資料已經成功拿下了。在
handle_json()
這個函數裡邊,你可以針對擷取到的資料做進一步的處理,如提取,儲存等,也可以直接列印出來看效果,看你自己的需求了。
如果有遇到問題,随時聯系我解決,歡迎加入我的
Python
學習交流群。
三、總結
大家好,我是Python進階者。這篇文章主要分享了一個
playwright
網絡爬蟲實戰案例教程,文中針對該問題給出了具體的解析和代碼實作。
最後感謝粉絲【HugoLB】分享,感謝【月神】、【瑜亮老師】、【此類生物】、【貓藥師Kelly】、【馮誠】等人參與學習交流。
小夥伴們,快快用實踐一下吧!如果在學習過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學習交流群共同探讨學習。
------------------- End -------------------
往期精彩文章推薦:
- Python網絡爬蟲逆向之frida rpc轉發案例(x物)
- 在xpath比對li标簽的時候跳過第一個li标簽,比對剩下的li标簽表達式怎麼寫?
- 盤點兩種使用Python網絡爬蟲實作東方财富網分時資料抓取方法
- 手把手教你使用Python網絡爬蟲和郵件發送來定制你的每日一文
歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支援
想加入Python學習群請在背景回複【入群】
萬水千山總是情,點個【在看】行不行
/今日留言主題/
随便說一兩句吧~~