Я пытался сделать приложение в Python с использованием Scrapy
, который имеет следующие функциональные возможности:Python Scrapy ReactorNotRestartable заменить
- апи остальные (я сделал, что с помощью флягу) прослушивает все запросы ползать/лом и возвращает ответ после обхода (ползучая часть достаточно коротка, поэтому соединение может быть держать-живо до ползать будет завершено.)
Я могу сделать это, используя следующий код.:
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)
Теперь проблема я столкнулся после создания реактора остановки (который, кажется, мне надо, так как я не хочу, чтобы прилипла к reactor.run()
). Я не мог принять дальнейший запрос после первого запроса. По завершении первого запроса я получил следующую ошибку:
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
Это очевидно, поскольку мы не можем перезапустить реактор.
Так что мои вопросы:
1) Как я мог обеспечить поддержку следующих запросов к сканированию?
2) Есть ли способ перейти к следующей строке после завершения реактора.run(), не останавливая его?
Помогает ли это [ответить] (http://stackoverflow.com/a/18924451/1117028)? –
См. Ответы на http://stackoverflow.com/questions/32724537/building-a-restful-flask-api-for-scrapy и http://stackoverflow.com/questions/36384286/how-to-integrate-flask- SCRAPY? noredirect = 1 & LQ = 1. –
@MikhailKorobov Спасибо за обмен ссылками, [используя подпроцесс] (http://stackoverflow.com/questions/36384286/how-to-integrate-flask-scrapy?noredirect11&lq=1#answer-37270442) работает для меня, – sagar