如何在scrapy中限制对站点的请求而不是代理服务器?

时间:2018-02-14 06:55:00

标签: scrapy

我正在使用代理并将AUTO_AUTOTHROTTLE_ENABLED设置为True。我的印象是,scrapy会限制我正在抓取的网站,而不是scrapy限制请求代理自己。如何限制对站点的请求而不是代理?

更新:我在发出每个请求时手动设置meta中的代理,而不是使用代理中间件。

1 个答案:

答案 0 :(得分:2)

我不认为这可以完全从蜘蛛那边做。通过查看throttling algorithmAutoThrottle extension source code,您可以看到正在使用的延迟是发送请求和获取响应之间的时差。中间发生的所有事情都会延迟到此延迟(包括代理延迟)。 要进一步验证这一点,请考虑以下步骤:

  1. AutoThrottle正在使用来自响应的延迟信息 在response.meta['download_latency](请参阅here
  2. 延迟信息(' download_latency')在下载完成后通过从当前时间减去开始时间在专用回调中设置(参见here)。
  3. 启动时间实际上是在指示下载代理下载请求之前设置的,这意味着中间的所有内容都会累计到最终延迟(请参阅here)。
  4. 如果您想通过代理实际根据目标延迟进行限制,则必须由代理本身处理。我建议使用一些托管代理池解决方案,如Crawlera

相关问题