終極反爬蟲:讓爬蟲爬假數據或者假頁面(和真的結構上幾乎沒有區別),讓爬蟲開發者意識不到自己的錯誤。最後爬蟲開發者被離職~~
1. 請求頭驗證。
瀏覽器訪問網站的時候除了會發送url,參數等內容外,還會給服務器端傳遞一些額外的請求頭(request header)。例如User-Agent,referer,host等等。簡單的爬蟲不做處理髮送請求相關的請求頭要麼爲空,要麼沒有,要麼內容不對。
反爬蟲
我們可以在服務端通過請求頭的驗證來預防簡單的爬蟲
應對方法
爬蟲程序設置合適的請求頭來模擬瀏覽器的訪問
2. ip訪問頻率限制
反爬蟲
服務端可以增加對ip訪問頻率的限制,當超過頻率就可以認爲是爬蟲
應對方法
我們可以設置每一次爬取的時間間隔(或者隨機時間間隔更好)長一點兒。或者通過僞裝ip,ip代理的方式來設置不同的ip地址。
- 僞裝ip
爬蟲增加x-forwarded-for請求頭設置隨機ip地址。
- 使用ip代理
實現準備大量的ip代理服務器組成ip池,然後每一次請求都從ip池中取一個作爲ip代理服務器發送請求
反爬蟲
- 針對第一種應對方法我們可以在對外的nginx反向代理中設置x-forwarded-for請求爲
#proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;#配置了這個服務端才能拿到真實的IP地址
proxy_set_header X-Forwarded-For $remote_addr;#最外層的nginx直接覆蓋掉x-forwarded-for請求頭內容爲真實ip
3. 蜜罐技術
反爬蟲
在網頁中設置一些隱藏的鏈接,這些鏈接在瀏覽器上是看不到的,所以用戶也是點擊不到的。但是爬蟲有可能會點擊到。如果有請求點擊到了,可以認爲是爬蟲
應對方法
需要手動去研究網頁的內容了,找出這些鏈接的規律然後排除
4. 不同類型的源代碼格式
反爬蟲
相同類型的網頁用不同的格式來編寫頁面,這樣爬蟲開發者在分析頁面的時候可能會遇到困難
應對方法
沒辦法,研究頁面
5. 驗證碼,滑動解鎖之類
反爬蟲
需要用戶輸入驗證碼或者滑動解鎖以後才能進行登陸
應對方法
- 驗證碼的話,可以考慮機器學習圖像識別來訓練驗證碼識別模型
- 滑動解鎖可以考慮使用selenium結合圖像識別來自動滑動滑塊實現滑動解鎖