常見的反爬機制及處理方式


1、Headers反爬蟲 :Cookie、Referer、User-Agent

User-Agent

用戶代理,是Http協議中的一部分,屬於頭域的組成部分,作用是描述發出HTTP請求的終端的一些信息。使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。服務器通過這個字段就可以知道訪問網站的是什么人。對於不是正常瀏覽器的用戶進行屏蔽。

解決方案: 偽裝瀏覽器的User-Agent,因為每個瀏覽器的User-Agent不一樣,並且所有的用戶都能使用瀏覽器。所有每次請求的時候條件瀏覽器的User-Agent,就能解決UA檢測。通過F12獲取headers,傳給requests.get()方法。或構造自己的User-Agent池,每次訪問隨機選擇。

 

Referer

是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,告訴服務器我是從哪個頁面鏈接過來的。例如有一些圖片網站在你請求圖片的時候,就會檢測你的Referer值,如果Referer不符合,不會返回正常的圖片。

解決方案:在檢測referer的請求中,攜帶符合的referer值。

 

2、IP限制 :網站根據IP地址訪問頻率進行反爬,短時間內禁止IP訪問

WEB系統都是走http協議跟WEB容器連通的,每次請求至少會產生一次客戶端與服務器的tcp連接。對於服務端來說可以很清楚的查看到,一個ip地址在單位時間內發起的請求。

當請求數超過一定的值之后,就可判斷為非正常的用戶請求。

解決方案

  • 構造自己IP代理池,每次訪問隨機選擇代理,經常更新代理池;
  • 購買開放代理或私密代理IP;
  • 降低爬取的速度;
  • ADSL動態撥號他有個獨有的特點,每撥一次號,就獲取一個新的IP。也就是它的IP是不固定的;

 

設置訪問時間間隔
  很多網站的反爬蟲機制都設置了訪問間隔時間,一個IP如果短時間內超過了指定的次數就會進入“冷卻CD”,所以除了輪換IP和user_agent 
可以設置訪問的時間間間隔長一點,比如每抓取一個頁面休眠一個隨機時間:

import time
import random

time.sleep(random.random()*3)

對於一個crawler來說,這是一個比較responsible的做法。 因為本來爬蟲就可能會給對方網站造成訪問的負載壓力,所以這種防范既可以從一定程度上防止被封,還可以降低對方的訪問壓力。

 

3、驗證碼

驗證碼(CAPTCHA)是“Completely Automated PublicTuring test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機還是人的公共全自動程序。防止:惡意破解密碼、刷票、論壇灌水,有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試。這個問題可以由計算機生成並評判,但是必須只有人類才能解答。由於計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認為是人類。

解決方案:

  • 手動識別驗證碼
  • pytesseract識別簡單的驗證碼
  • 對接打碼平台
  • 機器學習

 

4、 js混淆和渲染

 JavaScript 混淆是:

  • 去掉一些實際沒有調用的函數。
  • 將零散的變量聲明合並。
  • 邏輯函數的精簡。
  • 變量名的簡化。具體要看不同的壓縮工具的考慮優劣。常見的有UglifyJS、JScrambler等工具。

js渲染其實就是對HTML頁面的修改。比如有一些網頁本身沒有返回數據,數據是經過js加載之后添加到HTML當中的。當遇到這種情況的時候,我們要知道爬蟲是不會執行JavaScript操作。所以需要用其他的方法處理。

 

解決方案:

  • 通過閱讀網站js源碼,找到關鍵的代碼,並用python實現。
  • 通過閱讀網站js源碼,找到關鍵的代碼,用PyV8,execjs等庫直接執行js代碼。
  • 通過selenium庫直接模擬瀏覽器環境

 

其他

1、對查詢參數或Form表單數據認證(salt、sign)

  解決方案: 找到JS文件,分析JS處理方法,用Python按同樣方式處理

 

2、對響應內容做處理

  解決方案: 打印並查看響應內容,用xpath或正則做處理

 


免責聲明!

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



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