安装指南

支持的 Python 版本

Scrapy 需要 Python 3.9+,可以是 CPython 实现(默认)或 PyPy 实现(参见 Alternate Implementations)。

安装 Scrapy

如果您使用 AnacondaMiniconda,您可以从 conda-forge 频道安装此包,该频道为 Linux、Windows 和 macOS 提供了最新的包。

要使用 conda 安装 Scrapy,运行

conda install -c conda-forge scrapy

或者,如果您已经熟悉 Python 包的安装,可以从 PyPI 安装 Scrapy 及其依赖项,使用

pip install Scrapy

我们强烈建议您将 Scrapy 安装在专用的虚拟环境中,以避免与您的系统包冲突。

请注意,有时这可能需要解决某些 Scrapy 依赖项的编译问题,具体取决于您的操作系统,因此请务必查看特定平台的安装注意事项

有关更详细的特定平台说明以及故障排除信息,请继续阅读。

你需要知道的一些事情

Scrapy 完全用 Python 编写,依赖于一些关键的 Python 包(包括但不限于)

  • lxml,一个高效的 XML 和 HTML 解析器

  • parsel,一个基于 lxml 编写的 HTML/XML 数据提取库,

  • w3lib,一个用于处理 URL 和网页编码的多用途辅助库

  • twisted,一个异步网络框架

  • cryptographypyOpenSSL,用于处理各种网络安全需求

其中一些包本身依赖于非 Python 包,可能需要额外的安装步骤,具体取决于您的平台。请查看下方的特定平台指南

如果遇到与这些依赖项相关的任何问题,请参考它们各自的安装说明

特定平台的安装注意事项

Windows

虽然可以使用 pip 在 Windows 上安装 Scrapy,但我们建议您安装 AnacondaMiniconda 并使用 conda-forge 频道中的包,这将避免大多数安装问题。

安装 AnacondaMiniconda 后,使用以下命令安装 Scrapy:

conda install -c conda-forge scrapy

要在 Windows 上使用 pip 安装 Scrapy

警告

此安装方法需要“Microsoft Visual C++”来安装一些 Scrapy 依赖项,这比 Anaconda 需要多得多的磁盘空间。

  1. 下载并运行 Microsoft C++ Build Tools 来安装 Visual Studio Installer。

  2. 运行 Visual Studio Installer。

  3. 在工作负载(Workloads)部分,选择 C++ build tools

  4. 检查安装详情,确保以下包作为可选组件被选中

    • MSVC(例如 MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.23))

    • Windows SDK(例如 Windows 10 SDK (10.0.18362.0))

  5. 安装 Visual Studio Build Tools。

现在,您应该能够使用 pip 安装 Scrapy 了。

Ubuntu 14.04 或更高版本

Scrapy 目前已使用足够新的 lxml、twisted 和 pyOpenSSL 版本进行测试,并与最新的 Ubuntu 发行版兼容。但它也应该支持旧版本的 Ubuntu,例如 Ubuntu 14.04,尽管可能存在 TLS 连接问题。

请勿使用 Ubuntu 提供的 python-scrapy 包,它们通常太旧,无法跟上最新的 Scrapy 版本。

要在 Ubuntu(或基于 Ubuntu 的)系统上安装 Scrapy,您需要安装这些依赖项

sudo apt-get install python3 python3-dev python3-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
  • python3-dev, zlib1g-dev, libxml2-devlibxslt1-devlxml 所必需的

  • libssl-devlibffi-devcryptography 所必需的

之后,在虚拟环境中,您可以使用 pip 安装 Scrapy

pip install scrapy

注意

同样的非 Python 依赖项也可用于在 Debian Jessie (8.0) 及更高版本中安装 Scrapy。

macOS

构建 Scrapy 的依赖项需要 C 编译器和开发头文件。在 macOS 上,这通常由 Apple 的 Xcode 开发工具提供。要安装 Xcode 命令行工具,打开终端窗口并运行

xcode-select --install

存在一个已知问题,该问题阻止 pip 更新系统包。必须解决此问题才能成功安装 Scrapy 及其依赖项。以下是一些建议的解决方案

  • (推荐)请勿使用系统 Python。安装一个不会与系统其他部分冲突的新更新版本。以下是使用 homebrew 包管理器执行此操作的方法

    • 按照 https://brew.sh.cn/ 中的说明安装 homebrew

    • 更新您的 PATH 变量,声明应优先使用 homebrew 包而非系统包(如果您使用 zsh 作为默认 shell,请将 .bashrc 相应地更改为 .zshrc

      echo "export PATH=/usr/local/bin:/usr/local/sbin:$PATH" >> ~/.bashrc
      
    • 重新加载 .bashrc 以确保更改生效

      source ~/.bashrc
      
    • 安装 python

      brew install python
      
  • (可选)在 Python 虚拟环境中安装 Scrapy

此方法是针对上述 macOS 问题的权宜之计,但对于管理依赖项来说这是一个很好的总体实践,并且可以补充第一种方法。

采用这些解决方法中的任何一种后,您应该就能够安装 Scrapy 了

pip install Scrapy

PyPy

我们建议使用最新的 PyPy 版本。对于 PyPy3,仅测试了 Linux 安装。

大多数 Scrapy 依赖项现在都有 CPython 的二进制 wheel,但没有 PyPy 的。这意味着这些依赖项将在安装过程中构建。在 macOS 上,您可能会遇到构建 Cryptography 依赖项的问题。此问题的解决方案此处有说明,即 brew install openssl,然后导出该命令推荐的标志(仅在安装 Scrapy 时需要)。在 Linux 上安装除了安装构建依赖项外没有特殊问题。在 Windows 上使用 PyPy 安装 Scrapy 尚未经过测试。

您可以通过运行 scrapy bench 来检查 Scrapy 是否正确安装。如果此命令出现诸如 TypeError: ... got 2 unexpected keyword arguments 之类的错误,这意味着 setuptools 无法识别 PyPy 特定的某个依赖项。要解决此问题,运行 pip install 'PyPyDispatcher>=2.1.0'

故障排除

AttributeError: ‘module’ object has no attribute ‘OP_NO_TLSv1_1’

在您安装或升级 Scrapy、Twisted 或 pyOpenSSL 后,可能会遇到带有以下 traceback 的异常

[…]
  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'

出现此异常的原因是您的系统或虚拟环境中安装的 pyOpenSSL 版本不受您的 Twisted 版本支持。

要安装您的 Twisted 版本支持的 pyOpenSSL 版本,请使用 tls 附加选项重新安装 Twisted

pip install twisted[tls]

详情请参阅 Issue #2473