执行以下代码时出现 twisted.internet.error.ReactorNotRestartable
错误:
from time import sleep
from scrapy import signals
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings
from scrapy.xlib.pydispatch import dispatcher
result = None
def set_result(item):
result = item
while True:
process = CrawlerProcess(get_project_settings())
dispatcher.connect(set_result, signals.item_scraped)
process.crawl('my_spider')
process.start()
if result:
break
sleep(3)
第一次它起作用,然后我得到错误。我每次都创建 process
变量,这是什么问题?
原文由 k_wit 发布,翻译遵循 CC BY-SA 4.0 许可协议
默认情况下,
CrawlerProcess
的.start()
将在所有爬虫完成后停止它创建的 Twisted 反应器。如果在每次迭代中创建
process
,则应调用process.start(stop_after_crawl=False)
。另一种选择是自己处理 Twisted 反应器并使用
CrawlerRunner
。 文档有一个这样做的例子。