scrapy CONCURRENT_REQUESTS 每个蜘蛛还是每个机器?

Are scrapy CONCURRENT_REQUESTS per spider or per machine?

设计架构的新手问题在这里:

我的目标 我想随着时间的推移跟踪多个 Twitter 个人资料。

我要构建的内容: 一个 SpiderMother class 与一些数据库(持有 CrawlJobs)接口以产生和管理许多小蜘蛛,每个蜘蛛以不规则的时间间隔在 Twitter 上抓取 1 个用户页面(作业将根据一些算法)。 它们由 SpiderMother 作为子进程产生,并且根据爬网的成功,数据库作业被删除。这是一个好的架构吗?

我看到的问题:

假设我生成了 100 只蜘蛛,我的 CONCURRENT_REQUESTS 限制是 10 只,twitter.com 会立即被所有 100 只蜘蛛击中,还是它们会排成一排一个接一个地走?

大多数 scrapy 设置/运行时间配置将在 运行 期间为当前打开的蜘蛛隔离。默认的 scrapy 请求下载器也将只对每个蜘蛛起作用,所以如果你启动 100 个进程,你确实会看到 100 个并发请求。您有多个选项可以在全局范围内强制执行每个域的并发性,其中 none 非常简单:

  1. 每个域只使用一个蜘蛛 运行ning 并通过 redis 提供它(查看 scrapy-redis)。或者一次不要生成超过一只蜘蛛。
  2. 拥有固定的蜘蛛池或限制您从协调器生成的蜘蛛数量。将并发设置设置为 "desired_concurrency divided by number of spiders".
  3. 覆盖 scrapy 下载器 class 行为以在外部存储其值(例如在 redis 中)。

就我个人而言,我可能会选择第一个,如果受到单个进程规模的性能限制,则选择第二个。