爬蟲系列 --- 反爬機制和破解方法匯總


反爬機制和破解方法匯總

一什么是爬蟲和反爬蟲?

  • 爬蟲:使用任何技術手段,批量獲取網站信息的一種方式。
  • 反爬蟲:使用任何技術手段,阻止別人批量獲取自己網站信息的一種方式。

二  Headers and referer 反爬機制

*headers進行反爬是最常見的反爬蟲策略。

*還有一些網站會對 Referer (上級鏈接)進行檢測(機器行為不太可能通過鏈接跳轉實現)

從而實現爬蟲。

 

headers 知識補充***

host:提供了主機名及端口號
Referer 提供給服務器客戶端從那個頁面鏈接過來的信息(有些網站會據此來反爬)
Origin:Origin字段里只包含是誰發起的請求,並沒有其他信息.(僅存於post請求)
User agent: 發送請求的應用程序名(一些網站會根據UA訪問的頻率間隔時間進行反爬)
proxies: 代理,一些網站會根據ip訪問的頻率次數等選擇封ip.
cookie: 特定的標記信息,一般可以直接復制,對於一些變化的可以選擇構造.
(session=requests.session()自動把cookie信息存入response對象中)

Accept首部為客戶端提供了一種將其喜好和能力告知服務器的方式

首部            描述

Accept          告訴服務器能夠發送哪些媒體類型

Accept-Charset      告訴服務器能夠發送哪些字符集

Accept-Encoding     告訴服務器能夠發送哪些編碼方式(最常見的是utf-8)

Accept-Language     告訴服務器能夠發送哪些語言

Cache-control: 這個字段用於指定所有緩存機制在整個請求/響應鏈中必須服從的指令

 

三 ip限制

限制ip訪問頻率和次數進行反爬.

解決措施:構造自己的 IP 代理池,然后每次訪問時隨機選擇代理(但一些 IP 地址不是非常穩定,需要經常檢查更新)

 


四 UA限制

UA使用戶訪問網站時候的瀏覽器標識.
溫馨提醒:
當然如果反爬對時間還有限制的話,可以在requests 設置timeout(最好是隨機休眠,這樣會更安全穩定,time.sleep())

解決措施,構建自己的UA池,每次python做requests訪問時隨機掛上UA標識,更好的模擬瀏覽器行為.
超級簡單的請求頭fake_useragent庫(https://www.jianshu.com/p/b76df35aec93)


#隨機請求頭
import requests
from fake_useragent import UserAgent
ua = UserAgent()
headers = {'User-Agent': ua.random}
url = '待爬網頁的url'
resp = requests.get(url, headers=headers)
##待補充 請求加睡眠時間

 

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

圖片驗證碼:通過簡單的圖像識別是可以完成
驗證碼識別的基本方法:截圖,二值化、中值濾波去噪、分割、緊縮重排(讓高矮統一)、字庫特征匹配識別。

 

六  Ajax動態加載

Ajax動態加載的工作原理是:從網頁的 url 加載網頁的源代碼之后,會在瀏覽器里執行JavaScript程序。
這些程序會加載出更多的內容,並把這些內容傳輸到網頁中。這就是為什么有些網頁直接爬它的URL時卻
沒有數據的原因。
解決方案:若使用審查元素分析”請求“對應的鏈接(方法:右鍵→審查元素→Network→清空,點擊”加載更多
“,出現對應的GET鏈接尋找Type為text/html的,點擊,查看get參數或者復制Request URL),循環過程。如果“請求”之前有頁面,依據上一步的網址進行分析推導第1頁。以此類推,抓取抓Ajax地址的數據。對返回的json使用requests中的json進行解析,使用eval()轉成字典處理


抓包工具推薦:fiddler

 

七.cookie限制

一次打開網頁會生成一個隨機cookie,如果再次打開網頁這個cookie不存在,那么再次設置,第三次打開仍然不存在,這就非常有可能是爬蟲在工作了.

解決措施:在headers掛上相應的cookie或者根據其方法進行構造.

 


免責聲明!

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



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