【问题标题】:ReactorNotRestartable error when running two spiders sequentially using CrawlerProcess使用 CrawlerProcess 顺序运行两个蜘蛛时出现 ReactorNotRestartable 错误
【发布时间】:2020-10-29 19:34:34
【问题描述】:

我正在尝试顺序运行两个蜘蛛,这是我的模块的结构

class tmallSpider(scrapy.Spider):
    name = 'tspider'
    ...

class jdSpider(scrapy.Spider):
    name = 'jspider'
    ...

process = CrawlerProcess(get_project_settings())
process.crawl('tspider')
process.crawl('jspider')
process.start(stop_after_crawl=False)

当我运行这个时,我得到这个错误:

raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable

当我在终端中滚动时,我看到成功运行了两个蜘蛛,并且成功抓取了我要获取的数据。但是,错误发生在最后,我猜是因为进程无法终止?我尝试了 process.stop 但它不起作用。我还尝试了官方指南 (https://docs.scrapy.org/en/latest/topics/practices.html) 上的代码,但那会导致蜘蛛未找到错误。有什么办法解决吗?

【问题讨论】:

    标签: python scrapy web-crawler pyspider


    【解决方案1】:

    您是否尝试过 CrawlRunner 和文档给出的示例? CrawlerRunner 可用于运行多个蜘蛛并能够手动停止。

    如果有,您能否提供一个代码的最小示例以及您收到的明确错误消息。

    【讨论】:

    • 是的,我试过这些configure_logging() runner = CrawlerRunner() runner.crawl('tspider') runner.crawl('jspider') d = runner.join() d.addBoth(lambda _: reactor.stop()) reactor.run() 我得到的错误很长,但最后它说'raise KeyError("Spider not found: {}".format(spider_name)) KeyError: '未找到蜘蛛:tspider''
    • Traceback(最近一次调用最后):文件“/Users/tiaxie/PycharmProjects/Tmall/venv/lib/python3.8/site-packages/scrapy/spiderloader.py”,第 76 行,在加载返回 self._spiders[spider_name] KeyError: 'tspider'
    • 你试过去掉 runner.crawl('jspider') 中的单引号吗? crawl 方法采用类名而不是字符串。
    • 我刚刚修复了这个问题,但它又回到了与我之前发布的 raise error.ReactorNotRestartable() twisted.internet.error.ReactorNotRestartable 相同的问题。再次,我可以看到爬虫得到了正确的结果,但是最后出现了这个错误,并且程序无法在不单击 pycharm 中的停止按钮的情况下终止
    • 如文档中所述,twisted.internet reactor 不可重新启动。对我有用的是使用多处理将每次运行隔离在不同的进程中。
    猜你喜欢
    • 2015-09-07
    • 1970-01-01
    • 2018-08-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 1970-01-01
    相关资源
    最近更新 更多