AutoThrottle extension

这是基于Scrapy服务器和要爬网的网站的负载自动限制爬网速度的扩展.

Design goals

  1. 对网站更好,而不是使用默认的零下载延迟
  2. automatically adjust scrapy to the optimum crawling speed, so the user doesn’t have to tune the download delays to find the optimum one. The user only needs to specify the maximum concurrent requests it allows, and the extension does the rest.

How it works

AutoThrottle扩展程序动态地调整下载延迟,以使Spider平均向每个远程网站发送AUTOTHROTTLE_TARGET_CONCURRENCY并发请求.

它使用下载延迟来计算延迟. 主要思想如下:如果服务器需要latency几秒钟的响应时间,则客户端应每隔latency/N秒发送一次请求,以并行处理N请求.

除了调整延迟之外,您还可以使用CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP选项设置一个小的固定下载延迟,并对并发施加硬性限制. 它将提供类似的效果,但是有一些重要的区别:

  • 因为下载延迟很小,所以偶尔会有请求突发;
  • 通常,非200(错误)响应可以比常规响应更快地返回,因此下载延迟较小且硬并发限制,爬虫将在服务器开始返回错误时更快地将请求发送到服务器. 但这与搜寻器应该做的相反-如果发生错误,则放慢速度更有意义:这些错误可能是由较高的请求率引起的.

AutoThrottle没有这些问题.

Throttling algorithm

AutoThrottle算法根据以下规则调整下载延迟:

  1. 蜘蛛总是以AUTOTHROTTLE_START_DELAY的下载延迟AUTOTHROTTLE_START_DELAY
  2. 当接收到响应时,目标下载延迟计算为latency / N ,其中latency是响应的延迟,并且NAUTOTHROTTLE_TARGET_CONCURRENCY .
  3. 将下一个请求的下载延迟设置为先前下载延迟和目标下载延迟的平均值;
  4. 非200响应的延迟不允许减少延迟;
  5. 下载延迟不能小于DOWNLOAD_DELAY或大于AUTOTHROTTLE_MAX_DELAY

Note

AutoThrottle扩展程序支持并发和延迟的标准Scrapy设置. 这意味着它将遵守CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP选项,并且永远不会将下载延迟设置为低于DOWNLOAD_DELAY .

在Scrapy中,下载延迟是用建立TCP连接与接收HTTP标头之间的时间来衡量的.

请注意,在协作多任务环境中很难精确测量这些延迟,因为例如Scrapy可能正在忙于处理Spider回调,并且无法参与下载. 但是,这些延迟仍应合理估计Scrapy(并最终是服务器)的繁忙程度,并且此扩展基于此前提.

Settings

用于控制AutoThrottle扩展的设置为:

有关更多信息,请参见其工作原理 .

AUTOTHROTTLE_ENABLED

Default: False

启用AutoThrottle扩展.

AUTOTHROTTLE_START_DELAY

Default: 5.0

初始下载延迟(以秒为单位).

AUTOTHROTTLE_MAX_DELAY

Default: 60.0

高延迟时要设置的最大下载延迟(以秒为单位).

AUTOTHROTTLE_TARGET_CONCURRENCY

1.1版的新功能.

Default: 1.0

Scrapy应该并行发送到远程网站的平均请求数.

默认情况下,AutoThrottle会调整延迟,以将单个并发请求发送到每个远程网站. 将此选项设置为较高的值(例如2.0 )以增加吞吐量和远程服务器上的负载. 较低的AUTOTHROTTLE_TARGET_CONCURRENCY值(例如0.5 )使爬虫更加保守和礼貌.

请注意,启用AutoThrottle扩展后,仍会使用CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP选项. 这意味着,如果将AUTOTHROTTLE_TARGET_CONCURRENCY设置为高于CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP的值,则AUTOTHROTTLE_TARGET_CONCURRENCY器将不会达到此并发请求数.

在每个给定的时间点,Scrapy发送的并发请求可能比AUTOTHROTTLE_TARGET_CONCURRENCY少得多; 这是爬虫尝试接近的建议值,而不是硬性限制.

AUTOTHROTTLE_DEBUG

Default: False

启用AutoThrottle调试模式,该模式将在收到的每个响应上显示统计信息,因此您可以看到如何实时调整节流参数.