Scrapy无法运行爬网

时间:2018-07-10 01:21:27

标签: python python-3.x scrapy

我在一个非常简单的示例代码(如下所示,来自教程网站)上运行Scrapy,以测试其设置是否正确。

我复制的代码:

# -*- coding: utf-8 -*-
import scrapy

class RedditbotSpider(scrapy.Spider):
    name = 'redditbot'
    allowed_domains = ['www.reddit.com/r/gameofthrones/']
    start_urls = ['http://www.reddit.com/r/gameofthrones//']

    def parse(self, response):
        pass

当我运行以下命令时

scrapy crawl redditbot

发生以下错误

The errors

我不确定正在发生什么并寻求有关正确设置scrapy的帮助。

3 个答案:

答案 0 :(得分:2)

请参阅:

https://github.com/scrapy/scrapy/issues/3143

并且:

https://github.com/scrapy/scrapy/issues/3325

最后,

https://github.com/twisted/twisted/pull/966

长话短说,这是Twisted for Python 3.7的错误-根本不是Scrapy。 Scrapy不仅仅是一个独立的Python模块,更是一个框架。 Scrapy本身会导入大量使用的模块,其中之一就是Twisted。因此,使用的任何数量的模块都可能发生错误。

您正在运行的Python 3.7当前是最新的。并非所有模块都将立即完美支持Python 3.7。因此Twisted尝试使用Python 3.7全新的新async关键字就是这种情况。参见:

https://docs.python.org/3/whatsnew/3.7.html

我建议立即安装Python 3.6;那么pippipenv只会安装使用Python 3.6更稳定的模块版本。

答案 1 :(得分:1)

目前scrapy暂时不支持Python 3.7,因为在Python 3.7中保留了async关键字,并且scrapy的依赖项twisted尚未解决此问题。

请参阅有关此问题的棘手问题:https://github.com/scrapy/scrapy/issues/3143

当前解决方案是安装具有此修复程序的Twisted分支:

  

您可以使用pip install git+https://github.com/lopuhin/twisted.git@9384-remove-async-param

安装分支

答案 2 :(得分:1)

scrapy方面的另一种解决方法是禁用导致错误的扩展名scrapy.extensions.telnet.TelnetConsole

只需更新settings.py中的以下几行:

EXTENSIONS = {
    'scrapy.extensions.telnet.TelnetConsole': None,
}

您很可能不会在spider中使用telnet,因此这不会使您的项目复杂化。

相关问题