python3.7下执行scrapy crawl命令SyntaxError: invalid syntax报错的解决方案

在win10环境下用python3.7写网页爬虫,采用scrapy1.5库时,执行一下命令:

scrapy startproject tutorial

可以正常创建项目文件,但是配置文件修改完毕,开始运行爬虫,执行以下命令时:

scrapy crawl test

python3.7报错,错误信息大体如下:

Error in sitecustomize; set PYTHONVERBOSE for traceback:
AttributeError: module 'sys' has no attribute 'setdefaultencoding'
py:1: ScrapyDeprecationWarning: Module `scrapy.spider` is deprecated, use `scrapy.spiders` instead
from scrapy.spider import Spider
2018-08-18 19:07:07 [scrapy.utils.log] INFO: Scrapy 1.5.1 started (bot: tutorial)
2018-08-18 19:07:07 [scrapy.crawler] INFO: Overridden settings: {'BOT_NAME': 'tutorial', 'NEWSPIDER_MODULE': 'tutorial.spiders', 'ROBOTSTXT_OBEY': True, 'SPIDER_MODULES': ['tutorial.spiders']}
Traceback (most recent call last):
File "c:\program files\python37\lib\runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
...
File "c:\program files\python37\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1006, in _gcd_import
...
File "c:\program files\python37\lib\site-packages\twisted\conch\manhole.py", line 154
def write(self, data, async=False):
^
SyntaxError: invalid syntax

报错为语法错误,检查爬虫文件没有发现明显错误,报错文件大部分指向python库相关源码而不是爬虫文件。

经查阅原因应为python3.7版本中async作为关键字处理,但是scrapy源码中引用了async作为变量名,从而出现语法错误。

解决方案:

修改Python3安装目录\Lib\site-packages\twisted\conch\manhole.py文件,批量查找且替换async关键字,可把async替换成其他未出现过的变量名,共出现5处,全部替换后相关报错消失。

发表评论

电子邮件地址不会被公开。 必填项已用*标注