1、并发请求的相关参数
1.1、设置并发请求的最大数量
CONCURRENT_REQUESTS
CONCURRENT_REQUESTS = 16 # 全局并发请求,下载器将执行的并发(即同时)请求的最大数量
# CONCURRENT_REQUESTS_PER_IP = 16 # 指任何单个IP执行的并发请求的最大数量,
# CONCURRENT_REQUESTS_PER_DOMAIN = 16 # 指任何单个域名执行的并发(即同时)请求的最大数量
CONCURRENT_REQUESTS
全局并发请求 (CONCURRENT_REQUESTS): Scrapy会维护一个队列,其中包含所有待处理的请求。当队列中的请求数小于 CONCURRENT_REQUESTS 时,Scrapy会继续添加新的请求到队列中。一旦达到上限,Scrapy将停止添加新的请求,直到有请求完成并从队列中移除。
CONCURRENT_REQUESTS_PER_IP
IP并发请求 (CONCURRENT_REQUESTS_PER_IP): Scrapy会为每个IP地址维护一个独立的队列。对于每个IP地址,如果其队列中的请求数小于 CONCURRENT_REQUESTS_PER_IP,Scrapy将继续向该IP地址发送请求。否则,它会暂停向该IP地址发送新请求,直到有请求完成并从队列中移除。
CONCURRENT_REQUESTS_PER_DOMAIN
域名并发请求 (CONCURRENT_REQUESTS_PER_DOMAIN): Scrapy会为每个域名维护一个独立的队列。对于每个域名,如果其队列中的请求数小于 CONCURRENT_REQUESTS_PER_DOMAIN,Scrapy将继续向该域名发送请求。否则,它会暂停向该域名发送新请求,直到有请求完成并从队列中移除。
1.2 延迟时间
DOWNLOAD_DELAY
# 设置在每次请求之间等待1秒
DOWNLOAD_DELAY = 1
DOWNLOAD_DELAY 是一个浮点数或整数,表示在每次请求之间等待的秒数。默认值通常为 0,即没有延迟。
1.3最大并发数和延迟时间
CONCURRENT_REQUESTS和DOWNLOAD_DELAY
现在假设一个场景
DOWNLOAD_DELAY = 1
CONCURRENT_REQUESTS =20
当我们有100个请求的时候,需要多少秒呢?
这里分为两个情况:
第一个情况
(请求一秒内可以完成)
我们的延迟时间是1秒,
所以每一个请求之间的延迟都是1秒,
所以100个请求需要100秒才能完成。
第二种情况
(请求需要很久,大于20秒以上,比如下载文件)
我们的延迟时间是1秒,
所以每一个请求之间的延迟都是1秒,
当到第20秒的时候,达到最大并发数20,
这时候即使到21秒,也不会进行第21个请求,
这时候100个请求需要100秒以上甚至几分钟才能完成。