天天看點

playwright網絡爬蟲實戰案例分享

點選上方“Python爬蟲與資料挖掘”,進行關注

回複“書籍”即可獲贈Python從入門到進階共10本電子書

不寝聽金鑰,因風想玉珂。

大家好,我是Python進階者。

一、前言

前幾天在Python白銀交流群【HugoLB】分享了一個

playwright

網絡爬蟲利器,如下圖所示。

playwright網絡爬蟲實戰案例分享

感覺挺有意思,上手難度也不算太大,這裡整理一份小教程分享給大家,後面遇到正常爬不動的網站,不妨試試看這個利器,興許會事半功倍哦!

二、實作過程

這裡使用新發地網站做一個簡單的示例,新發地網站最開始的時候是

get

請求,去年的時候開始使用

post

請求方式,網頁發生了變化,其實你正常使用網絡爬蟲的正常方式,也是可以擷取到資料的,而且效率也很高,這裡我是為了給大家做一個

playwright

網絡爬蟲示例,拿這個網站小試下牛刀。言歸正傳,一起來看看吧!

新發地網站的首頁如下圖所示:

playwright網絡爬蟲實戰案例分享

進入網頁之後,可以看到網頁的

url

,然後點選右側的

檢視更多

,即可進入到詳情頁,如下圖所示:

playwright網絡爬蟲實戰案例分享

此時可以看得到更多的資料量了,這裡隻是用一兩個頁面做一個示例,更多的頁面等大家自己去挖掘。

啟動浏覽器抓包,點選網頁的下一頁,可以看到響應資料如下圖所示:

playwright網絡爬蟲實戰案例分享

此時的請求參數如下圖所示:

playwright網絡爬蟲實戰案例分享

依次再點選下一頁,可以看到

Request URL

是不變的,變化的是

Payload

裡邊的

current

參數。

playwright網絡爬蟲實戰案例分享

此時的請求參數如下圖所示:

playwright網絡爬蟲實戰案例分享

那麼到這裡的話,網頁變化的規律其實已經很明顯了,接下來我們隻需要上

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)
           

運作之後的結果如下所示:

playwright網絡爬蟲實戰案例分享

可以看到資料已經成功拿下了。在

handle_json()

這個函數裡邊,你可以針對擷取到的資料做進一步的處理,如提取,儲存等,也可以直接列印出來看效果,看你自己的需求了。

如果有遇到問題,随時聯系我解決,歡迎加入我的

Python

學習交流群。

playwright網絡爬蟲實戰案例分享

三、總結

大家好,我是Python進階者。這篇文章主要分享了一個

playwright

網絡爬蟲實戰案例教程,文中針對該問題給出了具體的解析和代碼實作。

最後感謝粉絲【HugoLB】分享,感謝【月神】、【瑜亮老師】、【此類生物】、【貓藥師Kelly】、【馮誠】等人參與學習交流。

小夥伴們,快快用實踐一下吧!如果在學習過程中,有遇到任何問題,歡迎加我好友,我拉你進Python學習交流群共同探讨學習。

playwright網絡爬蟲實戰案例分享

------------------- End -------------------

往期精彩文章推薦:

  • Python網絡爬蟲逆向之frida rpc轉發案例(x物)
  • 在xpath比對li标簽的時候跳過第一個li标簽,比對剩下的li标簽表達式怎麼寫?
  • 盤點兩種使用Python網絡爬蟲實作東方财富網分時資料抓取方法
  • 手把手教你使用Python網絡爬蟲和郵件發送來定制你的每日一文
playwright網絡爬蟲實戰案例分享

歡迎大家點贊,留言,轉發,轉載,感謝大家的相伴與支援

想加入Python學習群請在背景回複【入群】

萬水千山總是情,點個【在看】行不行

/今日留言主題/

随便說一兩句吧~~