Scrapy:运行一个蜘蛛,然后使用收集的信息运行另一个蜘蛛

时间:2019-06-17 19:25:41

标签: python-3.x scrapy

在Scrapy文档中,他们给出的运行多个蜘蛛的示例如下:

process = CrawlerProcess()
process.crawl(MySpider1)
process.crawl(MySpider2)
process.start()

但是,问题是我想运行Spider1,解析数据,然后使用提取的数据运行Spider2。如果我做类似的事情:

process.crawl(MySpider1)
process.start()
parse_data_from_spider1()
pass_data_to_spider2_class()

process2.crawl(MySpider2)
process2.start()

它给了我可怕的ReactorNotRestartable错误。有人可以指导我如何做我在这里想要实现的目标吗?

1 个答案:

答案 0 :(得分:1)

您从the docs使用的代码使用内部API在同一进程中运行多个蜘蛛,因此如果您需要等待第一个蜘蛛完成然后再启动第二个蜘蛛,就会出现问题。

如果这是问题的全部范围,我的建议是将第一个蜘蛛的数据存储在第二个蜘蛛可以使用的地方(数据库,csv,jsonlines),然后将数据带入第二个蜘蛛可以在“蜘蛛”定义(其中定义了name,或者如果您有scrapy.Spider的子类,可能在__init__中)或在start_requests()方法中进行蜘蛛运行。 / p>

然后,您必须顺序运行Spider,您可以在文档的common practices部分中看到CrawlerRunner()链接延迟方法。

configure_logging()
runner = CrawlerRunner()

@defer.inlineCallbacks
def crawl():
    yield runner.crawl(MySpider1)
    yield runner.crawl(MySpider2)
    reactor.stop()

crawl()
reactor.run()