三. 突破反爬蟲

1.反爬蟲措施一般分為四類:
①基于驗證碼的反爬蟲:傳統(tǒng)驗證碼、邏輯驗證碼、滑動驗證碼、google訪問時彈出的驗證碼
②基于Headers的反爬蟲:常用的是User-Agent字段、Referer字段。
③基于用戶行為的反爬蟲:
a. 同一個IP短時間多次訪問同一頁面→使用大量IP代理進行繞過;
b. 同一賬戶短時間多次進行相同操作→注冊較多的賬戶登陸,構成一個cookie池,對用戶狀態(tài)進行自動切換;
c. 訪問頁面的間隔比較固定,不像人在訪問→將訪問間隔設置成隨機,盡可能模擬人的訪問頻率;
④基于動態(tài)頁面的反爬蟲:
a.頁面使用Ajax動態(tài)加載→需要分析Ajax請求,然后進行模擬發(fā)送獲取數(shù)據(jù)
b.Ajax請求的所有參數(shù)全部加密,無法構造所需數(shù)據(jù)的請求→ 使用selenium+phantomJS(缺點:較低的效率和較大的內(nèi)存消耗)
爬蟲和反爬蟲的斗爭中,最終必然是爬蟲勝利,只不過是付出多大的代價而已。

2.在scrapy中推薦的突破反爬蟲措施(也適用于普通爬蟲程序):
①動態(tài)User-Agent池(偽裝存在很多用戶)
可使用下載器中間件RandomUserAgent, 設置動態(tài)的User-Agent。使用時在settings.py中將內(nèi)置的UserAgentMiddleware禁用,并激活RandomUserAgent即可。

## 用于產(chǎn)生隨機的User-Agent
import random


class RandomUserAgent(object):
    def __init__(self, agents):
        self.agents = agents

    @classmethod
    def from_crawler(cls, crawler):
        # 從Settings.py中加載USER-AGENTS的值
        return cls(crawler.settings.getlist('USER-AGENTS'))

    def process_request(self, request, spider):
        # 在process_request中設置User-Agent的值
        request.headers.setdefault('User-Agent': random.choice(self.agents))

②禁用cookies
如果登陸的網(wǎng)站不需要登陸就可以進行爬取,可以嘗試將Cookies禁用,因為Cookies會跟蹤爬蟲的訪問過程,容易被發(fā)現(xiàn)。
禁用Cookies的設置方法:settings.py中→ COOKIES_ENABLED=False

③設置下載延時與自動限速
settings.py中→
DOWNLOAD_DELAY = 2 #下載延時
RANDOMIZE_DOWNLOAD_DELAY = True #延遲時間=(隨機值0.5-1.5)*DOWNLOAD_DELAY
但有一些網(wǎng)站會檢測訪問延遲的相似性,也有被發(fā)現(xiàn)的可能性,此時可以使用scrapy提供的自動限速擴展方法,此擴展能根據(jù)Scrapy服務器以及爬取的網(wǎng)站的負載自動限制爬取速度。

④代理IP池

⑤Tor代理

⑥分布式下載器:Crawlera

⑦Google cache

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容