【问题标题】:Why I am Getting KeyError in Scrapy?为什么我在 Scrapy 中遇到 KeyError?
【发布时间】:2017-07-09 15:34:23
【问题描述】:

我在 Celery 中使用 Scrapy 蜘蛛,我随机收到这种错误

Unhandled Error
Traceback (most recent call last):
    File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 428, in fireEvent
      DeferredList(beforeResults).addCallback(self._continueFiring)
    File "/usr/lib/python2.7/site-packages/twisted/internet/defer.py", line 321, in addCallback
      callbackKeywords=kw)
    File "/usr/lib/python2.7/site-packages/twisted/internet/defer.py", line 310, in addCallbacks
      self._runCallbacks()
    File "/usr/lib/python2.7/site-packages/twisted/internet/defer.py", line 653, in _runCallbacks
      current.result = callback(current.result, *args, **kw)
  --- <exception caught here> ---
    File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 441, in _continueFiring
      callable(*args, **kwargs)
    File "/usr/lib/python2.7/site-packages/twisted/internet/base.py", line 667, in disconnectAll
      selectables = self.removeAll()
    File "/usr/lib/python2.7/site-packages/twisted/internet/epollreactor.py", line 191, in removeAll
      [self._selectables[fd] for fd in self._reads],
  exceptions.KeyError: 94

数字因情况而异(在另一种情况下,94 可能是 97,依此类推)

我正在使用:

celery==3.1.19
Django==1.9.4
Scrapy==1.3.0

这就是我在 Celery 中运行 Scrapy 的方式:

from billiard import Process
from scrapy.crawler import CrawlerProcess
from scrapy.utils.project import get_project_settings

class MyCrawlerScript(Process):
    def __init__(self, **kwargs):
        Process.__init__(self)
        settings = get_project_settings('my_scraper')
        self.crawler = CrawlerProcess(settings)
        self.spider_name = kwargs.get('spider_name')
        self.kwargs = kwargs

    def run(self):
        self.crawler.crawl(self.spider_name, qwargs=self.kwargs)
        self.crawler.start()

def my_crawl_manager(**kwargs):
    crawler = MyCrawlerScript(**kwargs)
    crawler.start()
    crawler.join()

在 celery 任务中,我正在调用:

my_crawl_manager(spider_name='my_spider', url='www.google.com/any-url-here')

请知道为什么会这样吗?

【问题讨论】:

  • 我有几乎完全相同的错误。有什么解决办法吗?

标签: python django scrapy celery twisted


【解决方案1】:

我曾经遇到过这个问题。

检查spiders 文件夹中是否有空文件__init__.py 文件或。它应该在那里。

【讨论】:

  • 谢谢,我查过了,代码中没有遗漏__init__.py
  • 为什么 init.py 是最多的?我没有遇到这个问题,但我很好奇......顺便说一句,我没有 init 文件
  • @AmiHollander 在这里阅读答案stackoverflow.com/questions/448271/what-is-init-py-for
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-03
  • 1970-01-01
  • 2014-06-30
  • 1970-01-01
  • 2010-10-18
相关资源
最近更新 更多