为什么scrapy-redis不起作用?

Tre*_*per 1 python web-crawler scrapy redis

我从github下载scrapy-redis并按照说明运行它但它失败了并给出了这个错误:

2013-01-04 17:38:50+0800 [-] ERROR: Unhandled error in Deferred:
2013-01-04 17:38:50+0800 [-] Unhandled Error
        Traceback (most recent call last):
          File "/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/scrapy/cmdline.py", line 138, in _run_command
            cmd.run(args, opts)
          File "/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/scrapy/commands/crawl.py", line 44, in run
            self.crawler.crawl(spider)
          File "/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/scrapy/crawler.py", line 47, in crawl
            return self.engine.open_spider(spider, requests)
          File "/usr/local/lib/python2.7/dist-packages/Twisted-12.2.0-py2.7-linux-i686.egg/twisted/internet/defer.py", line 1187, in unwindGenerator
            return _inlineCallbacks(None, gen, Deferred())
        --- <exception caught here> ---
          File "/usr/local/lib/python2.7/dist-packages/Twisted-12.2.0-py2.7-linux-i686.egg/twisted/internet/defer.py", line 1045, in _inlineCallbacks
            result = g.send(result)
          File "/usr/local/lib/python2.7/dist-packages/Scrapy-0.16.3-py2.7.egg/scrapy/core/engine.py", line 218, in open_spider
            scheduler = self.scheduler_cls.from_crawler(self.crawler)
        exceptions.AttributeError: type object 'Scheduler' has no attribute 'from_crawler'
Run Code Online (Sandbox Code Playgroud)

如何处理?谢谢.

Tal*_*lin 6

问题是scrapy-redis是一年前使用scrapy 0.13编写的.scrapy的当前版本是0.17,如果你将scrapy/core/engine.py 的当前源代码去年版本进行比较,你会发现在这两个版本之间的某个时刻添加了导致错误的行(在事实上,它是在20128月21日添加的)

简而言之,错误正在发生,因为scrapy-redis不再与当前版本的scrapy兼容.可能值得联系开发人员询问他/她项目是否仍处于活动状态,否则将需要分叉存储库并自行修复.