Scrapy - Réacteur pas de Redémarrage

avec:

from twisted.internet import reactor
from scrapy.crawler import CrawlerProcess

J'ai toujours couru ce processus avec succès:

process = CrawlerProcess(get_project_settings())
process.crawl(*args)
# the script will block here until the crawling is finished
process.start() 

mais depuis que j'ai déplacé ce code dans un web_crawler(self) fonction, comme suit:

def web_crawler(self):
    # set up a crawler
    process = CrawlerProcess(get_project_settings())
    process.crawl(*args)
    # the script will block here until the crawling is finished
    process.start() 

    # (...)

    return (result1, result2) 

et a commencé à l'appel de la méthode à l'aide de l'instanciation de classe, comme:

def __call__(self):
    results1 = test.web_crawler()[1]
    results2 = test.web_crawler()[0]

et en cours d'exécution:

test()

J'obtiens l'erreur suivante:

Traceback (most recent call last):
  File "test.py", line 573, in <module>
    print (test())
  File "test.py", line 530, in __call__
    artists = test.web_crawler()
  File "test.py", line 438, in web_crawler
    process.start() 
  File "/Library/Python/2.7/site-packages/scrapy/crawler.py", line 280, in start
    reactor.run(installSignalHandlers=False)  # blocking call
  File "/Library/Python/2.7/site-packages/twisted/internet/base.py", line 1194, in run
    self.startRunning(installSignalHandlers=installSignalHandlers)
  File "/Library/Python/2.7/site-packages/twisted/internet/base.py", line 1174, in startRunning
    ReactorBase.startRunning(self)
  File "/Library/Python/2.7/site-packages/twisted/internet/base.py", line 684, in startRunning
    raise error.ReactorNotRestartable()
twisted.internet.error.ReactorNotRestartable

quel est le problème?

  • Êtes-vous en cours d'exécution "web_crawler()" plus d'une fois par script? Vous ne pouvez pas démarrer tordue d'un réacteur plus d'une fois.
  • non pas que je suis au courant de. ce que je suis en train de faire est de définir le robot d'exploration de la fonction en une fonction de classe, et l'exécution du processus avec un appel méthode. comme: results = test.web_crawler().
  • J'ai édité la question, merci
InformationsquelleAutor data_garden | 2017-01-05