这是一个扩展,基于Scrapy服务器和您正在爬行的网站的负载,自动限制爬行速度。 设计目标¶对站点更好,而不是使用默认的下载延迟为零 自动调整Scrapy到最佳的爬行速度,因此用户不必调整下载延迟来找到最佳的。用户只需要指定它允许的最大并发请求,其余的由扩展来完成。
它是如何工作的¶AutoThrottle 扩展动态调整下载延迟,使蜘蛛发送 AUTOTHROTTLE_TARGET_CONCURRENCY 平均每个远程网站的并发请求。 它使用下载延迟来计算延迟。主要思想如下:如果服务器需要 latency 响应时间为秒,客户端应每秒钟发送一个请求 latency/N 秒有 N 并行处理的请求。 不需要调整延迟,只需设置一个小的固定下载延迟,并对使用 CONCURRENT_REQUESTS_PER_DOMAIN 或 CONCURRENT_REQUESTS_PER_IP 选项。它会产生类似的效果,但有一些重要的区别: AutoThrottle 没有这些问题。 节流算法¶AutoThrottle 算法根据以下规则调整下载延迟: 蜘蛛总是以下载延迟开始 AUTOTHROTTLE_START_DELAY ; 当收到响应时,目标下载延迟计算为 latency / N 在哪里? latency 是响应的延迟,并且 N 是 AUTOTHROTTLE_TARGET_CONCURRENCY . 下一个请求的下载延迟设置为上一个下载延迟和目标下载延迟的平均值; 不允许非200响应的延迟减少延迟; 下载延迟不能小于 DOWNLOAD_DELAY 或大于 AUTOTHROTTLE_MAX_DELAY
注解 autothrottle扩展支持并发和延迟的标准 Scrapy 设置。这意味着它将尊重 CONCURRENT_REQUESTS_PER_DOMAIN 和 CONCURRENT_REQUESTS_PER_IP 选项,并且从不将下载延迟设置为低于 DOWNLOAD_DELAY . 在scrappy中,下载延迟是以建立TCP连接和接收HTTP头之间所经过的时间来度量的。 注意,在一个合作的多任务环境中,这些延迟很难精确测量,因为scrapy可能正忙于处理spider回调,例如,无法参加下载。然而,这些延迟仍然应该对Scrapy(最终是服务器)有多忙给出一个合理的估计,并且这个扩展是在这个前提下构建的。
|