J'ai essayé de faire une application en Python en utilisant Scrapy
qui a les fonctionnalités suivantes:substitut ReactorNotRestartable Python
- Un reste api (je l'avais fait ce flacon à l'aide) écoute à toutes les demandes ramper/ferraille et retourner la réponse après avoir rampé (la partie en rampant est assez courte, de sorte que la connexion peut être keep-alive jusqu'à ce crawling se terminé.)
Je suis en mesure de le faire en utilisant le code suivant.:
items = []
def add_item(item):
items.append(item)
# set up crawler
crawler = Crawler(SpiderClass,settings=get_project_settings())
crawler.signals.connect(add_item, signal=signals.item_passed)
# This is added to make the reactor stop, if I don't use this, the code stucks at reactor.run() line.
crawler.signals.connect(reactor.stop, signal=signals.spider_closed) #@UndefinedVariable
crawler.crawl(requestParams=requestParams)
# start crawling
reactor.run() #@UndefinedVariable
return str(items)
Maintenant, le problème que je suis confronté est après avoir fait l'arrêt du réacteur (qui me semble nécessaire que je ne veux pas collé à la reactor.run()
). Je n'ai pas pu accepter la demande supplémentaire après la première demande. Après la première demande se rempli, je suis l'erreur suivante:
Traceback (most recent call last):
File "c:\python27\lib\site-packages\flask\app.py", line 1988, in wsgi_app
response = self.full_dispatch_request()
File "c:\python27\lib\site-packages\flask\app.py", line 1641, in full_dispatch_request
rv = self.handle_user_exception(e)
File "c:\python27\lib\site-packages\flask\app.py", line 1544, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "c:\python27\lib\site-packages\flask\app.py", line 1639, in full_dispatch_request
rv = self.dispatch_request()
File "c:\python27\lib\site-packages\flask\app.py", line 1625, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "F:\my_workspace\jobvite\jobvite\com\jobvite\web\RequestListener.py", line 38, in submitForm
reactor.run() #@UndefinedVariable
File "c:\python27\lib\site-packages\twisted\internet\base.py", line 1193, in run
self.startRunning(installSignalHandlers=installSignalHandlers)
File "c:\python27\lib\site-packages\twisted\internet\base.py", line 1173, in startRunning
ReactorBase.startRunning(self)
File "c:\python27\lib\site-packages\twisted\internet\base.py", line 684, in startRunning
raise error.ReactorNotRestartable()
ReactorNotRestartable
Ce qui est évident, puisque nous ne pouvons pas redémarrer le réacteur.
Mes questions sont les suivantes:
1) Comment pourrais-je fournir un soutien pour les prochaines demandes de ramper?
2) Est-il possible de passer à la ligne suivante après reactor.run() sans l'arrêter?
Est-ce que cela [réponse] (http://stackoverflow.com/a/18924451/1117028) aide? –
Voir les réponses à http://stackoverflow.com/questions/32724537/building-a-restful-flask-api-for-scrapy et http://stackoverflow.com/questions/36384286/how-to-integrate-flask- scrapy? noredirect = 1 & lq = 1. –
@MikhailKorobov Merci de partager les liens, [en utilisant subprocess] (http://stackoverflow.com/questions/36384286/how-to-integrate-flask-scrapy?noredirect=1&lq=1#answer-37270442) fonctionne pour moi, – sagar