Skip to main content

AutoThrottle扩展

这是根据Scrapy服务器和您正在抓取的网站的负载自动限制抓取速度的扩展程序。

设计目标

  1. 更好的网站,而不是使用默认下载延迟零

  2. 自动将刮擦调整到最佳抓取速度,因此用户不必调整下载延迟以找到最佳抓取速度。用户只需要指定它允许的最大并发请求,并且扩展完成其余部分。

怎么运行的

AutoThrottle扩展动态地调整下载延迟,使蜘蛛发送 AUTOTHROTTLE_TARGET_CONCURRENCY 并发请求平均到每个远程网站。

它使用下载延迟来计算延迟。主要想法如下:如果服务器需要 latency 秒来响应,客户端应该每个 latency/N 秒发送一个请求,以并行处理 N 请求。

而不是调整延迟,可以只设置一个小的固定下载延迟,并强加硬限制并发使用 CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP 选项。它会提供类似的效果,但有一些重要的区别:

  • 因为下载延迟很小,会有偶然的请求突发;

  • 通常非200(错误)响应可以比常规响应更快地返回,因此具有小的下载延迟和硬并发限制搜寻器将在服务器开始返回错误时更快地向服务器发送请求。但这是与爬虫应该做的相反 - 在错误的情况下,减慢速度更有意义:这些错误可能是由高请求率引起的。

AutoThrottle没有这些问题。

调节算法

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

  1. 蜘蛛总是从 AUTOTHROTTLE_START_DELAY 的下载延迟开始;

  2. 当接收到响应时,目标下载延迟被计算为 latency / N,其中 latency 是响应的等待时间,NAUTOTHROTTLE_TARGET_CONCURRENCY

  3. 下一次请求的下载延迟被设置为先前下载延迟和目标下载延迟的平均值;

  4. 不允许非200响应的延迟减少延迟;

  5. 下载延迟不能小于 DOWNLOAD_DELAY 或大于 AUTOTHROTTLE_MAX_DELAY

注解

AutoThrottle扩展符合标准Scrapy设置的并发和延迟。这意味着它将尊重 CONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IP 选项,并且从不设置低于 DOWNLOAD_DELAY 的下载延迟。

在Scrapy中,下载延迟测量为在建立TCP连接和接收HTTP头之间经过的时间。

注意,在协作多任务环境中,这些延迟很难准确测量,因为Scrapy可能忙于处理蜘蛛回调,并且无法参加下载。然而,这些延迟应该仍然给出Scrapy(以及最终的服务器)有多忙的合理估计,并且这个扩展建立在这个前提上。

设置

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

有关更多信息,请参阅 怎么运行的

AUTOTHROTTLE_ENABLED

默认值:False

启用AutoThrottle扩展。

AUTOTHROTTLE_START_DELAY

默认值:5.0

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

AUTOTHROTTLE_MAX_DELAY

默认值:60.0

在高延迟的情况下要设置的最大下载延迟(以秒为单位)。

AUTOTHROTTLE_TARGET_CONCURRENCY

1.1 新版功能.

默认值: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 的值,则搜寻器将不会达到此并发请求数。

在每个给定的时间点,Scrapy可以发送比 AUTOTHROTTLE_TARGET_CONCURRENCY 更多或更少的并发请求;它是抓取工具尝试接近的建议值,而不是硬限制。

AUTOTHROTTLE_DEBUG

默认值:False

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