Scrapy download_delay与max_concurrent_requests_per_domain

yan*_*ory 5 python concurrency scrapy

我对Scrapy DOWNLOAD_DELAYMAX_CONCURRENT_REQUESTS_PER_DOMAINScrapy 之间的差异和相互作用感到非常困惑。

下载延迟是否会影响每个域的并发请求的最大数量,例如,如果我将延迟设置为10秒,但每个域允许8个并发请求,那么这些并发请求是否不会并发而会根据下载延迟而错开?被同时解雇,但响应的下载却被错开了?有什么理由DOWNLOAD_DELAY不打电话REQUEST_DELAY吗?

例如,在以下情况下,信封的吞吐量计算将是什么:

  • start_urls 拥有给定域的100个URL
  • MAX_CONCURRENT_REQUESTS_PER_DOMAIN = 8
  • DOWNLOAD_DELAY = 3
  • 假设服务器需要2秒钟来生成响应
  • 假设我们生成的URL不超过已经生成的URL start_urls

相关的蜘蛛需要多长时间来处理此队列?

pad*_*pad 3

来自下载器代码

conc = self.ip_concurrency if self.ip_concurrency else self.domain_concurrency
conc, delay = _get_concurrency_delay(conc, spider, self.settings)
Run Code Online (Sandbox Code Playgroud)

所以看起来行为与此相同,其中表示

This setting also affects DOWNLOAD_DELAY: if CONCURRENT_REQUESTS_PER_IP is non-zero, download delay is enforced per IP, not per domain.
Run Code Online (Sandbox Code Playgroud)

所以我认为你不会通过大的 download_delay 实现太多的并发性。我在具有自动节流功能的慢速网络上运行爬网程序,并且一次并发请求不超过 2-3 个。