我得到的twisted.internet.error.ReactorNotRestartable错误,当我执行下面的代码:from time import sleepfrom scrapy import signalsfrom scrapy.crawler import CrawlerProcessfrom scrapy.utils.project import get_project_settingsfrom scrapy.xlib.pydispatch import dispatcherresult = Nonedef set_result(item): result = itemwhile 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每次都创建变量,这是什么问题?
3 回答
森栏
TA贡献1810条经验 获得超5个赞
默认情况下,CrawlerProcess的.start()将停止在所有爬虫完成它创建的扭曲反应器。
process.start(stop_after_crawl=False)如果process在每个迭代中创建,则应调用。
另一个选择是自己处理并使用Twisted反应堆CrawlerRunner。该文档有一个这样做的例子。
弑天下
TA贡献1818条经验 获得超8个赞
我能够像这样解决这个问题。process.start()应该只调用一次。
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()
添加回答
举报
0/150
提交
取消