首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scrapy :爬虫的并行和顺序运行

scrapy :爬虫的并行和顺序运行
EN

Stack Overflow用户
提问于 2021-09-16 16:40:40
回答 1查看 85关注 0票数 3

我有一个有多个蜘蛛的项目。有些需要几分钟,有些需要几个小时,以及介于两者之间的任何东西--然而,每次运行所用的时间通常都是相同的-因此,您可以假设刮板X的运行时间与刮板Y和Z的运行时间大致相同。

我想要做的不是从T0开始并行运行所有的任务,我想在开始时开始抓取器1,2,3,然后是链抓取器4,5,6在2次完成之后,然后在3次完成之后7,8,9,以平滑下游处理需求(并发数据库连接等)。

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

代码语言:javascript
复制
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()
EN

回答 1

Stack Overflow用户

发布于 2021-09-22 07:39:44

找到了答案--比我想象的要简单。

不需要担心停止反应堆(因此它被注释掉了)

刮板1和刮板2同时开始,刮板3在刮板2完成后开始。

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69212186

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档