爬虫蜘蛛AutoThrottle扩展动态调整下载延迟(52)python Scrapy教程1.51以上版本
这是基于Scrapy服务器和您正在抓取的网站的负载自动限制爬网速度的扩展。
它是如何工作的
AutoThrottle扩展动态调整下载延迟,使蜘蛛AUTOTHROTTLE_TARGET_CONCURRENCY平均向每个远程网站发送 并发请求。
它使用下载延迟来计算延迟。其主要思想是:如果一台服务器需要latency秒钟响应,客户端应该发送一个请求的每个latency/N秒,具有N并行处理的请求。
可以设置一个小的固定下载延迟,并使用CONCURRENT_REQUESTS_PER_DOMAIN或CONCURRENT_REQUESTS_PER_IP选项对并发性施加硬限制,而不是调整延迟 。它会提供类似的效果,但有一些重要的区别:
- 因为下载延迟很小,偶尔会有突发的请求;
- 通常非200(错误)响应可以比常规响应更快地返回,因此当下载延迟较小且硬并发限制时,爬虫将在服务器开始返回错误时更快地向服务器发送请求。但这与爬虫应该做的事情相反 – 如果出现错误,减速更有意义:这些错误可能是由高请求率引起的。
AutoThrottle没有这些问题。
节流算法
AutoThrottle算法根据以下规则调整下载延迟:
- 蜘蛛总是以下载延迟开始
AUTOTHROTTLE_START_DELAY; - 接收到响应时,目标延迟下载被计算为 ,其中是响应的等待时间,并且是。
latency / NlatencyNAUTOTHROTTLE_TARGET_CONCURRENCY - 下次请求的下载延迟设置为先前下载延迟和目标下载延迟的平均值;
- 非200响应的延迟不允许减少延迟;
- 下载延迟不能小于
DOWNLOAD_DELAY或大于AUTOTHROTTLE_MAX_DELAY
注意
AutoThrottle扩展程序遵循标准的Scrapy设置以实现并发和延迟。这意味着它将尊重CONCURRENT_REQUESTS_PER_DOMAIN和 CONCURRENT_REQUESTS_PER_IP选择,并且永远不会将下载延迟设置为低于DOWNLOAD_DELAY。
在Scrapy中,下载延迟测量为建立TCP连接和接收HTTP标头之间经过的时间。
请注意,在协作式多任务处理环境中,这些延迟很难准确测量,因为Scrapy可能正忙于处理蜘蛛回调,例如,无法参加下载。但是,这些延迟仍然可以合理估计Scrapy(最终是服务器)的繁忙程度,并且此扩展基于该前提。
设置
用于控制AutoThrottle扩展的设置包括:
AUTOTHROTTLE_ENABLEDAUTOTHROTTLE_START_DELAYAUTOTHROTTLE_MAX_DELAYAUTOTHROTTLE_TARGET_CONCURRENCYAUTOTHROTTLE_DEBUGCONCURRENT_REQUESTS_PER_DOMAINCONCURRENT_REQUESTS_PER_IPDOWNLOAD_DELAY
有关更多信息,请参阅其工作原理。
AUTOTHROTTLE_START_DELAY
默认: 5.0
初始下载延迟(以秒为单位)。
AUTOTHROTTLE_TARGET_CONCURRENCY
版本1.1中的新功能。
默认: 1.0
Scrapy应该与远程网站并行发送的平均请求数。
默认情况下,AutoThrottle会调整延迟以向每个远程网站发送单个并发请求。将此选项设置为更高的值(例如2.0)以增加远程服务器上的吞吐量和负载。较低的AUTOTHROTTLE_TARGET_CONCURRENCY值(例如0.5)使得爬虫更加保守和礼貌。
请注意,CONCURRENT_REQUESTS_PER_DOMAIN 并CONCURRENT_REQUESTS_PER_IP在启用自动油门扩展选项仍然尊重。这意味着如果AUTOTHROTTLE_TARGET_CONCURRENCY将if 设置为高于CONCURRENT_REQUESTS_PER_DOMAIN或的值 CONCURRENT_REQUESTS_PER_IP,则爬网程序将不会达到此并发请求数。
在每个给定的时间点,Scrapy可以发送或多或少的并发请求AUTOTHROTTLE_TARGET_CONCURRENCY; 它是爬虫尝试接近的建议值,而不是硬限制。
评论被关闭。