Python爬蟲——反爬


反爬概述

網絡爬蟲,是一個自動提取網頁的程序,它為搜索引擎從萬維網上下載網頁,是搜索引擎的重要組成。

但是當網絡爬蟲被濫用后,互聯網上就出現太多同質的東西,原創得不到保護。

於是,很多網站開始反網絡爬蟲,想方設法保護自己的內容。

他們根據ip訪問頻率,瀏覽網頁速度,賬戶登錄,輸入驗證碼,flash封裝,ajax混淆,js加密,圖片等技術,來應對網絡爬蟲。

防的一方不惜成本,迫使抓的一方在考慮成本效益后放棄。

抓的一方不惜成本,防的一方在考慮用戶流失后放棄。

反爬策略

一: User-Agent +Referer檢測

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

解決方案: 偽裝瀏覽器的User-Agent,因為每個瀏覽器的User-Agent不一樣,並且所有
的用戶都能使用瀏覽器。所有每次請求的時候條件瀏覽器的User-Agent,就能解決UA檢測

 

Referer是header的一部分,當瀏覽器向web服務器發送請求的時候,一般會帶上Referer,

告訴服務器我是從哪個頁面鏈接過來的。例如有一些圖片網站在你請求圖片的時候,就會檢測

你的Referer值,如果Referer不符合,不會返回正常的圖片。

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

二: js混淆和渲染

所謂 JavaScript 混淆,基本就是:

1.去掉一些實際沒有調用的函數。

2.將零散的變量聲明合並。

3.邏輯函數的精簡。

4.變量名的簡化。具體要看不同的壓縮工具的考慮優劣。常見的有UglifyJS、JScrambler等工具。

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

解決方案:

1.通過閱讀網站js源碼,找到關鍵的代碼,並用python實現。

2.通過閱讀網站js源碼,找到關鍵的代碼,用PyV8,execjs等庫直接執行js代碼。

3.通過selenium庫直接模擬瀏覽器環境

三:IP限制頻次

WEB系統都是走http協議跟WEB容器連通的,每次請求至少會產生一次客戶端與服務器的tcp連接。

對於服務端來說可以很清楚的查看到,一個ip地址在單位時間內發起的請求。

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

解決方案:

1.自行設計ip代理池,通過輪換的方式,每次請求攜帶不同的代理地址。

2.ADSL動態撥號他有個獨有的特點,每撥一次號,就獲取一個新的IP。也就是它的IP是不固定的。

四:驗證碼

驗證碼(CAPTCHA)是“Completely Automated PublicTuring test to tell Computers and Humans

Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機還是人的公共全自動程序。

可以防止:惡意破解密碼、刷票、論壇灌水,有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試。

這個問題可以由計算機生成並評判,但是必須只有人類才能解答。由於計算機無法解答

CAPTCHA的問題,所以回答出問題的用戶就可以被認為是人類。

解決方案:

1.手動識別驗證碼

2.pytesseract識別簡單的驗證碼

3.對接打碼平台

4.機器學習


免責聲明!

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



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