默认情况下,Scrapy 根据请求 URL 的域名分配下载槽位。为请求设置 HTTP 代理并不会把该 URL 变成代理的主机名。因此,发往不同站点的请求可以在共用一个中间层的同时保留不同的槽位。

AutoThrottle 使用观测到的下载延迟来调整每个槽位的延迟。标准的按域名并发上限和最小下载延迟仍然生效。

在修改算法之前先检查分组方式

自定义中间件可以指定 request.meta["download_slot"],从而覆盖常规的槽位选择。某些代理扩展使用自己的分组方式。如果看起来无关的站点共用了同一个限速器,请检查这些设置。

反过来,为每个代理分配不同的槽位可能让多个代理同时访问同一目标。这可能破坏爬虫本应遵守的整站限速。应根据所保护的资源来选择槽位键。

延迟包含你所走的路径

Scrapy 测量从发出请求到收到 HTTP 头的延迟。经代理转发的请求会把中间层的排队与转发延迟包含在这项观测中。AutoThrottle 并不会另外获得仅属于源站的处理时间。

提高并发并不能让这项测量把网站隔离出来。当两者都重要时,请把对目标的礼貌与代理容量作为独立的限制。共享代理可能需要跨目标槽位的额外并发预算,而每个目标仍保留自己的速率策略。

相关文章