scrapy:蜘蛛并行和顺序运行



我有一个有多个蜘蛛的scrapy项目。有些需要几分钟,有些需要几个小时,或者介于两者之间——但是每次运行所花费的时间通常是相同的——所以您可以假设scraper X与scraper Y和Z一起运行的时间大致相同。

我想做的是,而不是在T0开始并行运行,我想在开始时启动刮削1、2、3,然后在2完成后启动链式刮削4、5、6,在3完成后启动7,8,9,以平滑下游处理需求(并发数据库连接等)

我认为我需要链延迟,在文档中有一些明确的例子,但我不确定如何设置以及一些并行运行-当前启动代码如下(每个蜘蛛都在自己的外部文件)

from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerProcess
setting = get_project_settings()
process = CrawlerProcess(setting)
process.crawl('scraper1')
process.crawl('scraper2')
process.crawl('scraper3')
...etc...
...etc...
process.start()

找到了答案——比我想象的要容易。

无需担心停止反应器(因此它被注释掉)

1号刮板与2号刮板同时启动,2号刮板完成后3号刮板启动。


from scrapy.utils.project import get_project_settings
from scrapy.crawler import CrawlerProcess
setting = get_project_settings()
process = CrawlerProcess(setting)
@defer.inlineCallbacks
def crawl_seq():
global process
yield process.crawl('scraper2')
yield process.crawl('scraper3')
#reactor.stop()
crawl_seq()
process.crawl('scraper1')
process.start()