我必须从另一个python文件调用crawler,我使用以下代码。
def crawl_koovs():
spider = SomeSpider()
settings = get_project_settings()
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()
运行此操作时,我收到错误
exceptions.ValueError: signal only works in main thread
我能找到的唯一解决方法是使用
reactor.run(installSignalHandlers=False)
我不想使用,因为我想多次调用此方法并希望在下一次调用之前停止reactor。我可以做些什么来完成这项工作(可能会迫使爬虫在相同的主线程中开始)?
答案 0 :(得分:6)
我要对你说的第一件事是当你从外部文件中执行 Scrapy 时,将loglevel设置为INFO,你应该将它改为DEBUG以查看什么是' s如果您的代码不起作用,则会发生
你应该换行:
log.start()
有:
log.start(loglevel=log.DEBUG)
要将所有内容存储在日志中并生成文本文件(出于调试目的),您可以执行以下操作:
log.start(logfile="file.log", loglevel=log.DEBUG, crawler=crawler, logstdout=False)
关于将日志级别更改为DEBUG的信号问题,您可以看到一些可以帮助您修复它的输出,您可以尝试将脚本放入Scrapy Project文件夹以查看是否仍然崩溃。
如果您更改了该行:
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
有:
dispatcher.connect(reactor.stop, signals.spider_closed)
它说什么?
根据您的Scrapy版本,可能会弃用