在再識(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改了。

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

建立一個(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)