每台蜘蛛机或每台计算机的CONCURRENT_REQUESTS报废都是吗?

时间:2018-09-19 20:54:42

标签: scrapy scrapy-spider

新手在设计他的建筑问题在这里:

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

我要构建的东西: 一个SpiderMother类,它与某些数据库(持有CrawlJobs)接口以产生和管理许多小型Spider,每个Spider以不规则的间隔在twitter上爬行1个用户页面(作业将根据某种算法添加到数据库中) 。 它们由SpiderMother作为子流程生成,并且根据抓取的成功程度,数据库作业将被删除。这是一个好的架构吗?

我看到的问题:

让我们说我产生了100只蜘蛛,而我的CONCURRENT_REQUESTS限制是10只,twitter.com会立即被全部100只蜘蛛击中吗,还是它们排成一排然后又一个接一个?

1 个答案:

答案 0 :(得分:2)

在运行期间,将为当前打开的蜘蛛隔离大多数scrapy设置/运行时配置。默认的scrapy请求下载器也仅对每个蜘蛛起作用,因此,如果启动100个进程,则确实会看到100个同时请求。您可以通过多种方法在全球范围内强制执行每个域的并发操作,而这些选项都没有特别麻烦:

  1. 每个域仅使用一个蜘蛛运行,并通过redis对其进行馈送(请查看scrapy-redis)。另外,也不要一次产生多个蜘蛛。
  2. 具有固定的蜘蛛池或限制从协调器产生的蜘蛛数量。将并发设置设置为“ desired_concurrency除以蜘蛛数量”。
  3. 覆盖scrapy downloader类的行为以在外部存储其值(例如,在redis中)。

我个人可能会选择第一个,如果受到单个过程规模的性能限制的影响,我可能会选择第二个。