我有一个有多个蜘蛛的项目。有些需要几分钟,有些需要几个小时,以及介于两者之间的任何东西--然而,每次运行所用的时间通常都是相同的-因此,您可以假设刮板X的运行时间与刮板Y和Z的运行时间大致相同。
我想要做的不是从T0开始并行运行所有的任务,我想在开始时开始抓取器1,2,3,然后是链抓取器4,5,6在2次完成之后,然后在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()发布于 2021-09-22 07:39:44
找到了答案--比我想象的要简单。
不需要担心停止反应堆(因此它被注释掉了)
刮板1和刮板2同时开始,刮板3在刮板2完成后开始。
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()https://stackoverflow.com/questions/69212186
复制相似问题