天天看點

使用pyppeteer爬取被識别為webdriver的網站大功告成,能成功爬取!

需求:爬取一些網站的最新資訊,每日查閱一遍存入資料庫即可,而不是暴力爬取,即使沒有這個爬蟲, 每天也會通過手動去點選查閱相關資訊

嘗試辦法

1. 直接上來肯定采用簡單暴力的方式, requests

直接使用requests.get(url)的方式傳回 412錯誤,

使用pyppeteer爬取被識别為webdriver的網站大功告成,能成功爬取!

打開F12(浏覽器控制台工具)通過檢視請求清單可以發現, 第一次發送的請求被伺服器拒絕 傳回碼為412 并且直接跳轉到JS ,第三次請求才會正常通路到html内容,

使用pyppeteer爬取被識别為webdriver的網站大功告成,能成功爬取!

上圖為第一次通路請求與傳回資訊

使用pyppeteer爬取被識别為webdriver的網站大功告成,能成功爬取!

上圖為第二次正式請求html的請求頭與傳回頭

我們發現這第二次的請求頭中多了Cookie資訊

猜想第一次傳回412肯定與沒有攜帶cookie有關, 然後使用requests攜帶cookie(從浏覽器控制台中複制的cookie)的方式進行通路,果然能正常擷取到html,但是過了一會 我再運作一樣的代碼, 發現無法繼續擷取到html了。這個cookie是有時效性的。

2. 使用selenium進行抓取

使用大名鼎鼎的selenium+chrome的方式進行爬取, 發現每次打開浏覽器都是一片空白,估計是監聽到了selenium打開了浏覽器, 這個網站的反扒做的還不錯啊!

檢測 Selenium 的 JavaScript 代碼

webdriver = window.navigator.webdriver;
if (webdriver) {
    console.log('模拟浏覽器')
} else {
    console.log('正常浏覽器')
}

           

使用selenium我也放棄了

3. 使用pyppeteer進行抓取

pyppepteer相對selenium來說對使用者更加友好,環境一件部署,會自動下載下傳chromium程式,不好的就是支援浏覽器單一(或許是我沒有研究透徹)

剛開始發現也是傳回白色頁面,查閱相關文章發現 使用pyppeteer不使用enable-automation可以反偵察, 那麼我一勞永逸 直接在site-packages/pyppeteer/launcher.py中進行參數屏蔽

使用pyppeteer爬取被識别為webdriver的網站大功告成,能成功爬取!

這裡就不放代碼了, 有興趣wechat

大功告成,能成功爬取!