需求:爬取一些網站的最新資訊,每日查閱一遍存入資料庫即可,而不是暴力爬取,即使沒有這個爬蟲, 每天也會通過手動去點選查閱相關資訊
嘗試辦法
1. 直接上來肯定采用簡單暴力的方式, requests
直接使用requests.get(url)的方式傳回 412錯誤,
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZuBnL0ADNlZGNwMWYlFjNklzNhhDZ4QDM4UzMmZGMwATZxkzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
打開F12(浏覽器控制台工具)通過檢視請求清單可以發現, 第一次發送的請求被伺服器拒絕 傳回碼為412 并且直接跳轉到JS ,第三次請求才會正常通路到html内容,
上圖為第一次通路請求與傳回資訊
上圖為第二次正式請求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中進行參數屏蔽
這裡就不放代碼了, 有興趣wechat