跨多个域名的 Scrapy 代理并发
当多个目标域名共用同一份代理配额时,使用下载器的全局并发上限,并把共用该账号的其他爬虫一并计入。
如果每个目标都使用同一个代理账号,那么该账号的同时请求额度会在这些目标之间被共同消耗。仅按域名设限并不能表达这份共享预算。
假设某个账号最多允许 20 个同时请求,就需要留出余量,并设置爬虫的全局下载器上限:
CONCURRENT_REQUESTS = 16
这只是示例性的分配,并不是适用于所有服务商的推荐值。Scrapy 将 CONCURRENT_REQUESTS 定义为下载器同时请求数的上限。按域名的控制可以进一步降低并发,但它不能取代全局上限。
还要把其他爬虫算进来。两个各自被允许 16 个请求的独立爬虫,合起来就可能超过 20 的共享额度。要么有意拆分预算,要么在这些客户端汇合处施加共享限制。
还要弄清服务商统计的是什么。HTTP 请求、打开的 TCP 连接、活动隧道和每秒请求数是不同的量。持久连接与多路复用会让它们的计数出现差异。因此,请求并发设置并不等于完整的连接或速率限制器。
目标站点的节奏应作为单独的约束保留。即使代理账号还有未使用的容量,对某个单独目标而言,降低并发或增加下载延迟仍可能是合适的。