零、安装 Scrapy

Scrapy 必须运行在 CPython 或 PyPy 下的 Python 2.7 或 Python 3.5 及以上平台。如果您使用的是 Anaconda 或 Miniconda ,则可以从 conda-forge 安装该软件包,它包含适用于 Linux 、 Windows 和 OS X 的最新软件包。
如果要使用 conda命令安装 Scrapy 只需运行以下命令:

conda install -c conda-forge scrapy

当你熟悉 Python 软件包的安装,则可以使用以下方法从PyPI安装Scrapy及其依赖项:

pip install Scrapy
  1. 注意

这里需要注意的是 Scrapy 是用 Python 编写的,因此依赖于一些 Python 包,主要依赖如下:

  • lxml,高效的XML和HTML解析器;
  • parsel,是在lxml之上编写的HTML / XML数据提取库;
  • w3lib,一个用于处理URL和网页编码的多功能助手;
  • twisted,异步网络框架;
  • cryptography 和 pyOpenSSL,用于处理各种网络级安全需求;

运行 Scrapy 所需依赖包的最低版本如下:

  • Twisted 14.0
  • lxml 3.4
  • pyOpenSSL 0.14

注意: Scrapy 虽然可以使用这些软件包的老旧版本,但不能保证它将继续工作。

一、特定平台说明

  1. Windows
    尽管可以使用 pip 在 Windows 上安装 Scrapy ,但建议安装 Anaconda 或 Miniconda 并使用 conda-forge 中的软件包,可以避免大多数安装问题。使用以下命令安装 Scrapy :
conda install -c conda-forge scrapy
  1. Ubuntu
    Scrapy 目前使用的是新版本的 lxml 、twisted 和 pyOpenSSL ,并与最新的 Ubuntu 发行版兼容。在 Ubuntu 系统上安装 scrapy ,需要安装如下依赖:
sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev

如果要在Python 3上安装scrapy,则还需要Python 3开发标头:

sudo apt-get install python3 python3-dev

在 virtualenv 内部,可以使用 pip 安装 Scrapy :

pip install scrapy

注意:不要使用 python-scrapy Ubuntu 提供的软件包,它不是最新的软件包,而且存在兼容性问题。

  1. Mac OS
    Scrapy 需要依赖 C 编译器。在 OS X上,通常由 Xcode 开发工具提供。要安装 Xcode 命令行工具,在命令行中输入如下命令:
xcode-select --install

目前存在一个已知问题,无法通过 pip 更新系统软件包。必须解决此问题才能成功安装 Scrapy 及其依赖项。以下是一些建议的解决方案:

  • 不要使用系统自带 python,安装新的更新版本,该版本应与系统的其余部分不冲突;
  • 在虚拟环境中安装 Scrapy 。

二、故障排除

  1. AttributeError: ‘module’ object has no attribute ‘OP_NO_TLSv1_1’
    在安装或升级 Scrapy、Twisted、pyOpenSSL 之后,可能会收到带有以下异常:
[…]
  File "[…]/site-packages/twisted/protocols/tls.py", line 63, in <module>
    from twisted.internet._sslverify import _setAcceptableProtocols
  File "[…]/site-packages/twisted/internet/_sslverify.py", line 38, in <module>
    TLSVersion.TLSv1_1: SSL.OP_NO_TLSv1_1,
AttributeError: 'module' object has no attribute 'OP_NO_TLSv1_1'

出现此异常的原因是您的系统或虚拟环境具有 Twisted 版本不支持的 pyOpenSSL 版本。秩序输入如下命令即可解决:

pip install twisted[tls]

的 pyOpenSSL 版本。秩序输入如下命令即可解决:

pip install twisted[tls]