Scrapy - Реактор не перезапускается в Джанго - PullRequest
0 голосов
/ 29 октября 2018

Я столкнулся с проблемой, когда хочу запустить своих пауков в Джанджо. Несколько месяцев назад. Этот метод работает для меня:

    def crawllist(self,lists):
    runner = CrawlerRunner(get_project_settings())
    for topic in lists:
        logging.error("topic name is %s" % topic.name)
        runner.crawl(topic.type,author = topic.author,links = topic.base_url)
    d = runner.join()
    d.addBoth(lambda _: reactor.stop())
    logging.error("start crawl")
    reactor.run(installSignalHandlers=False)

Но сейчас это не работает. Получите эти ошибки:

    Internal Server Error: /CreateTopicServlet
Traceback (most recent call last):
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/exception.py", line 34, in inner
  response = get_response(request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 126, in _get_response
  response = self.process_exception_by_middleware(e, request)
File "/usr/local/lib/python3.5/dist-packages/django/core/handlers/base.py", line 124, in _get_response
  response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/zdc/Push/job/views.py", line 150, in CreateTopicServlet
  sp.crawllist([item])
File "/home/zdc/Push/job/SpiderManager.py", line 59, in crawllist
  reactor.run(installSignalHandlers=False)
File "/usr/local/lib/python3.5/dist-packages/twisted/internet/base.py", line 1260, in run
  self.startRunning(installSignalHandlers=installSignalHandlers)
File "/usr/local/lib/python3.5/dist-packages/twisted/internet/base.py", line 1240, in startRunning
  ReactorBase.startRunning(self)
File "/usr/local/lib/python3.5/dist-packages/twisted/internet/base.py", line 746, in startRunning
  raise error.ReactorAlreadyRunning()

Я прочитал все ответы об этом. Но это не работает для меня. Паук может успешно работать, когда я запускаю его локально без djanjo. Но встретите Реактор, не перезапускаемый в Джанджо. Я пробовал такой метод

    def crawl(self,type,url,author):
    print('crawl11')
    module_name="Spidermanager.spiders.{}".format(type+'spider')
    scrapy_var = importlib.import_module(module_name)   #do some dynamic import of selected spider   
    spiderObj=scrapy_var.zhihuSpider(author = author,links = url)
    print(spiderObj.start_urls)
    runner = CrawlerRunner(get_project_settings())
    runner.crawl(spiderObj)
    print('crawl finished')

Это решает проблему реактора ... Но паук, кажется, не бежит и ничего не ползает.

...