鍍金池/ 教程/ Python/ 自動(dòng)限速(AutoThrottle)擴(kuò)展
Benchmarking
命令行工具(Command line tools)
下載器中間件(Downloader Middleware)
信號(hào)(Signals)
Telnet 終端(Telnet Console)
初窺 Scrapy
數(shù)據(jù)收集(Stats Collection)
Scrapyd
通用爬蟲(Broad Crawls)
Item Loaders
試驗(yàn)階段特性
Scrapy 入門教程
自動(dòng)限速(AutoThrottle)擴(kuò)展
Settings
Scrapy 終端(Scrapy shell)
下載項(xiàng)目圖片
DjangoItem
調(diào)試(Debugging)Spiders
選擇器(Selectors)
Feed exports
Spiders Contracts
借助 Firefox 來(lái)爬取
Logging
Spiders
Ubuntu 軟件包
實(shí)踐經(jīng)驗(yàn)(Common Practices)
安裝指南
Item Exporters
擴(kuò)展(Extensions)
Items
Spider 中間件(Middleware)
異常(Exceptions)
例子
發(fā)送 email
架構(gòu)概覽
常見問(wèn)題(FAQ)
Jobs:暫停,恢復(fù)爬蟲
核心 API
使用 Firebug 進(jìn)行爬取
Item Pipeline
Link Extractors
Web Service
調(diào)試內(nèi)存溢出

自動(dòng)限速(AutoThrottle)擴(kuò)展

該擴(kuò)展能根據(jù) Scrapy 服務(wù)器及您爬取的網(wǎng)站的負(fù)載自動(dòng)限制爬取速度。

設(shè)計(jì)目標(biāo)

  1. 更友好的對(duì)待網(wǎng)站,而不使用默認(rèn)的下載延遲 0。
  2. 自動(dòng)調(diào)整 scrapy 來(lái)優(yōu)化下載速度,使得用戶不用調(diào)節(jié)下載延遲及并發(fā)請(qǐng)求數(shù)來(lái)找到優(yōu)化的值。 用戶只需指定允許的最大并發(fā)請(qǐng)求數(shù),剩下的都交給擴(kuò)展來(lái)完成。

擴(kuò)展是如何實(shí)現(xiàn)的

在 Scrapy 中,下載延遲是通過(guò)計(jì)算建立 TCP 連接到接收到 HTTP 包頭(header)之間的時(shí)間來(lái)測(cè)量的。

注意,由于 Scrapy 可能在忙著處理 spider 的回調(diào)函數(shù)或者無(wú)法下載,因此在合作的多任務(wù)環(huán)境下準(zhǔn)確測(cè)量這些延遲是十分苦難的。 不過(guò),這些延遲仍然是對(duì) Scrapy(甚至是服務(wù)器)繁忙程度的合理測(cè)量,而這擴(kuò)展就是以此為前提進(jìn)行編寫的。

限速算法

算法根據(jù)以下規(guī)則調(diào)整下載延遲及并發(fā)數(shù):

  1. spider 永遠(yuǎn)以 1 并發(fā)請(qǐng)求數(shù)及 AUTOTHROTTLE_START_DELAY 中指定的下載延遲啟動(dòng)。
  2. 當(dāng)接收到回復(fù)時(shí),下載延遲會(huì)調(diào)整到該回復(fù)的延遲與之前下載延遲之間的平均值。

注解

AutoThrottle 擴(kuò)展尊重標(biāo)準(zhǔn) Scrapy 設(shè)置中的并發(fā)數(shù)及延遲。這意味著其永遠(yuǎn)不會(huì)設(shè)置一個(gè)比 DOWNLOAD_DELAY 更低的下載延遲或者比 CONCURRENT_REQUESTS_PER_DOMAIN 更高的并發(fā)數(shù) (或 CONCURRENT_REQUESTS_PER_IP,取決于您使用哪一個(gè))。

設(shè)置

下面是控制 AutoThrottle 擴(kuò)展的設(shè)置:

  • AUTOTHROTTLE_ENABLED
  • AUTOTHROTTLE_START_DELAY
  • AUTOTHROTTLE_MAX_DELAY
  • AUTOTHROTTLE_DEBUG
  • CONCURRENT_REQUESTS_PER_DOMAIN
  • CONCURRENT_REQUESTS_PER_IP
  • DOWNLOAD_DELAY

更多內(nèi)容請(qǐng)參考限速算法。

AUTOTHROTTLE_ENABLED

默認(rèn):False

啟用 AutoThrottle 擴(kuò)展。

AUTOTHROTTLE_START_DELAY

默認(rèn):5.0

初始下載延遲(單位:秒)。

AUTOTHROTTLE_MAX_DELAY

默認(rèn):60.0

在高延遲情況下最大的下載延遲(單位秒)。

AUTOTHROTTLE_DEBUG

默認(rèn):False

起用 AutoThrottle 調(diào)試(debug)模式,展示每個(gè)接收到的 response。您可以通過(guò)此來(lái)查看限速參數(shù)是如何實(shí)時(shí)被調(diào)整的。