如何通过 python3 创建 scrapy 项目

How to create the scrapy project by python3

我用MacOS,它有python2.7和python3.4。我使用 pip install 命令在 python 2.7 中安装 scrapy。购买 我也使用 pip3 install 命令在 python3.4 中安装 scrapy...

看了scrapy.org的官方文档,知道scrapy只支持python 2.7。当我使用命令 scrapy startproject tutorial 时,它会 return 下面的错误。

如何在 python 2.7 中使用命令 scrapy startproject tutorial

  File "/Library/Frameworks/Python.framework/Versions/3.4/bin/scrapy", line 9, in <module>
    load_entry_point('Scrapy==1.1.0dev1', 'console_scripts', 'scrapy')()
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Scrapy-1.1.0dev1-py3.4.egg/scrapy/cmdline.py", line 122, in execute
    cmds = _get_commands_dict(settings, inproject)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Scrapy-1.1.0dev1-py3.4.egg/scrapy/cmdline.py", line 46, in _get_commands_dict
    cmds = _get_commands_from_module('scrapy.commands', inproject)
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Scrapy-1.1.0dev1-py3.4.egg/scrapy/cmdline.py", line 29, in _get_commands_from_module
    for cmd in _iter_command_classes(module):
  File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/Scrapy-1.1.0dev1-py3.4.egg/scrapy/cmdline.py", line 21, in _iter_command_classes
    for obj in vars(module).itervalues():
AttributeError: 'dict' object has no attribute 'itervalues'

使用 pip 安装 scrapy 会将一个可执行文件放在您的 PATH 中的某个位置。由于您安装了两次,因此 python2 版本可能已被覆盖。要查找此文件,请使用命令 which scrapy。要查看文件的内容,请使用 cat $(which scrapy)。它可能包含这样一行内容:#!/usr/bin/python3.4 导致它使用 python.

的不兼容版本

要解决此问题,请卸载 python3 版本的 scrapy。

pip3 uninstall scrapy

然后使用 hash -r 或启动新的终端会话清理 bash 中的命令缓存。

如果 scrapy 命令仍然不起作用,您可能还需要重新安装它的 python 2 版本。

pip install scrapy --force-reinstall

有解决办法,开发者已经提供了Python3.x的scrapy,你可以试试

$ pip install scrapy==1.1.0rc1

文章是here

实际上你可以使用最新的 Scrapy 来处理 python 3. 我为包管理和虚拟环境编写了一个 article about installing Scrapy 3.1.1rc3 for Python3 on Windows and use it in Pycharm. I use Conda。对于这项工作,Conda 比 pip 和 easy_install 工作得更好。它应该在 Mac 中工作,只需稍作改动。