因為反爬蟲暫時是個較新的領域,因此有些定義要自己下:
誤傷:在反爬蟲的過程中,錯誤的將普通使用者識別為爬蟲。誤傷率高的反爬蟲策略,效果再好也不能用。
攔截:成功地阻止爬蟲訪問。這裡會有攔截率的概念。通常來說,攔截率越高的反爬蟲策略,誤傷的可能性就越高。因此需要做個權衡。
資源:機器成本與人力成本的總和。
這裡要切記,人力成本也是資源,而且比機器更重要。因為,根據摩爾定律,機器越來越便宜。而根據it行業的發展趨勢,程式設計師工資越來越貴。因此,通常伺服器反爬就是讓爬蟲工程師加班才是王道,機器成本並不是特別值錢。
1 通過headers欄位來反爬
headers中有很多字段,這些欄位都有可能會被對方伺服器拿過來進行判斷是否為爬蟲1.1 通過headers中的user-agent欄位來反爬
1.2 通過referer欄位或者是其他欄位來反爬
1.3 通過cookie來反爬
2 通過請求引數來反爬
請求引數的獲取方法有很多,向伺服器傳送請求,很多時候需要攜帶請求引數,通常伺服器端可以通過檢查請求引數是否正確來判斷是否為爬蟲2.1 通過從html靜態檔案中獲取請求資料(github登入資料)
2.2 通過傳送請求獲取請求資料
2.3 通過js生成請求引數
2.4 通過驗證碼來反爬
1 基於請求頻率或總請求數量
爬蟲的行為與普通使用者有著明顯的區別,爬蟲的請求頻率與請求次數要遠高於普通使用者1.1 通過請求ip/賬號單位時間內總請求數量進行反爬
解決方法:對應的通過購買高質量的ip的方式能夠解決問題/購買個多賬號
1.2 通過同一ip/賬號請求之間的間隔進行反爬
解決方法:請求之間進行隨機等待,模擬真實使用者操作,在新增時間間隔後,為了能夠高速獲取資料,盡量使用**池,如果是賬號,則將賬號請求之間設定隨機休眠
1.3 通過對請求ip/賬號每天請求次數設定閾值進行反爬
2 根據爬取行為進行反爬,通常在爬取步驟上做分析
2.1 通過js實現跳轉來反爬
解決方法: 多次抓包獲取條狀url,分析規律
2.2 通過蜜罐(陷阱)獲取爬蟲ip(或者**ip),進行反爬
2.3 通過假資料反爬
2.4 阻塞任務佇列
2.5 阻塞網路io
解決方法: 觀察爬蟲執行狀態/多執行緒對請求執行緒計時/傳送請求錢
2.6 運維平台綜合審計
1 對響應中含有的資料進行特殊化處理
通常的特殊化處理主要指的就是css資料偏移/自定義字型/資料加密/資料/特殊編碼格式等1.1 通過自定義字型來反爬
下圖來自貓眼電影電腦版
1.2 通過css來反爬
下圖來自貓眼去哪兒電腦版
1.3 通過js動態生成資料進行反爬
1.4 通過資料化反爬
1.5 通過編碼格式進行反爬
Python反爬手段之User Agent池
user agent即使用者 簡稱ua,它是乙個特殊字串頭,使得伺服器能夠識別客戶使用的作業系統及版本 cpu型別 瀏覽器及版本 瀏覽器渲染引擎 瀏覽器語言 瀏覽器外掛程式等。一些 常常通過判斷ua來給不同的作業系統 不同的瀏覽器傳送不同的頁面,因此可能造成某些頁面無法在某個瀏覽器中正常顯示,但通過...
常見的反爬手段和解決思路
誤傷 在反爬蟲的過程中,錯誤的將普通使用者識別為爬蟲。誤傷率高的反爬蟲策略,效果再好也不能用。攔截 成功地阻止爬蟲訪問。這裡會有攔截率的概念。通常來說,攔截率越高的反爬蟲策略,誤傷的可能性就越高,因此需要做個權衡。資源 機器成本與人力成本的總和。1 通過headers欄位來反爬headers中有很多...
常見的反爬手段與解決方法
headers中的user agent欄位反爬 解決 隨機生成user agent pip install fake useragent from fake useragent import useragent ua useragent for i in range 10 隨機生成各種瀏覽器的ua ...