常見的反爬機制及應對策略


1.Headers:

  從用戶的headers進行反爬是最常見的反爬策略,Headers是一種最常見的反爬機制Headers是一種區分瀏覽器行為和機器行為中最簡單的方法,還有一些網站會對Referer (上級鏈接)進行檢測 從而實現爬蟲。

  相應的解決措施:通過審查元素或者開發者工具獲取相應的headers 然后把相應的headers 傳輸
給python 的requests,這樣就能很好地繞過。

2.IP 限制

  一些網站會根據你的IP 地址訪問的頻率,次數進行反爬。也就是說如果你用單一的IP 地址訪問頻
率過高,那么服務器會在短時間內禁止這個IP 訪問。
  解決措施:構造自己的IP 代理池,然后每次訪問時隨機選擇代理(但一些IP 地址不是非常穩定,
需要經常檢查更新)。
3. UA 限制
  UA 是用戶訪問網站時候的瀏覽器標識,其反爬機制與ip 限制類似。  

  解決措施:構造自己的UA 池,每次python 做requests 訪問時隨機掛上UA 標識,更好地模擬瀏
覽器行為。當然如果反爬對時間還有限制的話,可以在requests 設置timeout(最好是隨機休眠,這
樣會更安全穩定,time.sleep())。

4.驗證碼反爬蟲或者模擬登陸  

  驗證碼:這個辦法也是相當古老並且相當的有效果,如果一個爬蟲要解釋一個驗證碼中的內容,這在以前通過簡單的圖像識別是可以完成的,但是就現在來講,驗證碼的干擾線,噪點都很多,甚至還出現了人類都難以認識的驗證碼

  解決措施:驗證碼識別的基本方法:截圖,二值化、中值濾波去噪、分割、緊縮重排(讓高

矮統一)、字庫特征匹配識別。(python 的PIL 庫或者其他)模擬登陸(例如知乎等):用好python requests 中的session

5.Ajax 動態加載  

  網頁的不希望被爬蟲拿到的數據使用Ajax 動態加載,這樣就為爬蟲造成了絕大的麻煩,如果一個爬蟲不具備js 引擎,或者具備js 引擎,但是沒有處理js 返回的方案,或者是具備了js 引擎,但是沒辦法讓站點顯示啟用腳本設置。基於這些情況,ajax 動態加載反制爬蟲還是相當有效的。

Ajax 動態加載的工作原理是:從網頁的url 加載網頁的源代碼之后,會在瀏覽器里執行JavaScript程序。這些程序會加載出更多的內容,並把這些內容傳輸到網頁中。這就是為什么有些網頁直接爬它的

URL 時卻沒有數據的原因.

  解決策略:若使用審查元素分析”請求“對應的鏈接(方法:右鍵→審查元素→Network→清空,點

擊”加載更多“,出現對應的GET 鏈接尋找Type 為text/html 的,點擊,查看get 參數或者復制Request
URL),循環過程。如果“請求”之前有頁面,依據上一步的網址進行分析推導第1 頁。以此類推,抓取
抓Ajax 地址的數據。對返回的json 使用requests 中的json 進行解析,使用eval()轉成字典處理fiddler 可以格式化輸出json 數據。

6.cookie 限制
  一次打開網頁會生成一個隨機cookie,如果再次打開網頁這個cookie 不存在,那么再次設置,第

三次打開仍然不存在,這就非常有可能是爬蟲在工作了。

  解決措施:在headers 掛上相應的cookie 或者根據其方法進行構造(例如從中選取幾個字母進行

構造)。如果過於復雜,可以考慮使用selenium 模塊(可以完全模擬瀏覽器行為)。

認真做一件事,並將之完全學會掌握為止!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM