J'ai l'erreur twisted.internet.error.ReactorNotRestartable
lorsque j'exécute le code suivant:
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)
Pour la première fois, cela fonctionne, alors je reçois une erreur. Je crée une variable process
à chaque fois, alors quel est le problème?
Par défaut, CrawlerProcess
/ s .start()
arrêtera le réacteur Twisted créé une fois tous les robots d'exploration terminés.
Vous devez appeler process.start(stop_after_crawl=False)
si vous créez process
à chaque itération.
Une autre option consiste à manipuler vous-même le réacteur Twisted et à utiliser CrawlerRunner
. Les docs ont un exemple en le faisant.
Il suffit d'utiliser la séquence:
process.crawl(...)
process.stop()
process.start()
sinon meilleur moyen. Cela semble étrange, mais cela a fonctionné de mon côté.