我在一个非常简单的示例代码(如下所示,来自教程网站)上运行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
发生以下错误
我不确定正在发生什么并寻求有关正确设置scrapy的帮助。
答案 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;那么pip
或pipenv
只会安装使用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,因此这不会使您的项目复杂化。