我必须从另一个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。我可以做些什么来使它工作(也许强制爬行器在同一个“主”线程中启动)?
2条答案
按热度按时间kzmpq1sx1#
首先我要说的是,当您从外部文件执行Scrapy时,loglevel设置为INFO,您应该将其更改为DEBUG,以查看如果代码不工作会发生什么情况
您应该更改以下行:
用于:
要将所有内容存储在日志中并生成一个文本文件(用于调试),您可以执行以下操作:
关于日志级别更改为DEBUG的信号问题,也许您可以看到一些输出,可以帮助您修复它,您可以尝试将脚本放入Scrapy Project文件夹,看看是否仍然崩溃。
如果更改行:
用于:
上面写了什么?
根据您的Scrapy版本,它可能会被弃用
6tr1vspr2#
对于循环和使用带计时器触发器的un azure函数,请使用此taks
如果我们想让一个任务每X秒重复运行一次,我们可以使用twisted.internet.task.LoopingCall:从https://docs.twisted.org/en/stable/core/howto/time.html开始