Scrapy進(jìn)階-防ban策略

再識(shí)Scrapy-下載豆瓣圖書封面中我們學(xué)會(huì)了如何下載圖片。但是在大批量爬取的時(shí)候我們最怕的就是被網(wǎng)站ban了。官網(wǎng)提供了幾種方法:

1. download_delay

因?yàn)槲覀円笈颗廊【W(wǎng)頁,為了防止過分密集影響到別人的服務(wù)器,建議在setting.py中設(shè)置DOWNLOAD_DELAY=2,最好是在晚上睡覺的時(shí)候跑,這樣雖然速度慢了一點(diǎn),但是被dan的幾率會(huì)降低很多哦。

2. 禁止cookies

cookies,是指某些網(wǎng)站為了辨別用戶身份而儲(chǔ)存在用戶本地終端(Client Side)上的數(shù)據(jù)(通常經(jīng)過加密),有的時(shí)候我們需要登錄網(wǎng)站進(jìn)行爬取數(shù)據(jù),所以cookies很重要,但是當(dāng)我們不需要讓網(wǎng)站記住我們的是誰的時(shí)候,那么禁止cookies也就防止了可能使用cookies識(shí)別爬蟲軌跡的網(wǎng)站得逞。
在settings.py中設(shè)置COOKIES_ENABLES=False。也就是不啟用cookies middleware,不想web server發(fā)送cookies。

3. 變換user agent

user agent是指包含瀏覽器信息、操作系統(tǒng)信息等的一個(gè)字符串,也稱之為一種特殊的網(wǎng)絡(luò)協(xié)議。服務(wù)器通過它判斷當(dāng)前訪問對(duì)象是瀏覽器、郵件客戶端還是網(wǎng)絡(luò)爬蟲。之前爬取豆瓣的時(shí)候我們就把原來自表爬蟲身份的user agent改了。

user agent

如果只用一個(gè)user agent 爬取太多次也會(huì)讓服務(wù)器產(chǎn)生懷疑的,所以我們需要大量的user agent用來建立user agent pool。并通過DOWNLOADER_MIDDLEWARES切換agent。

DOWNLOADER_MIDDLEWARES

建立一個(gè)middlewares.py, 內(nèi)容如下:

# -*- coding: utf-8 -*-
import random
from scrapy.conf import settings

class RandomUserAgent(object):
    """Randomly rotate user agents based on a list of predefined ones"""
    def __init__(self, agents):
        self.agents = agents

    @classmethod
    def from_crawler(cls, crawler):
        return cls(crawler.settings.getlist('USER_AGENTS'))

    def process_request(self, request, spider):
        ua = random.choice(self.agents)
        request.headers.setdefault('User-Agent', ua)

下面兩個(gè)方法目前不會(huì),先占位

4. 使用proxy

5. 分布式爬取

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

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

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