安装指南

支持的 Python 版本

Scrapy 需要 Python 3.10+,支持 CPython 实现(默认)或 PyPy 实现(参见 替代实现)。

安装 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++ 生成工具 以安装 Visual Studio 安装程序。

  2. 运行 Visual Studio 安装程序。

  3. 在“工作负荷”部分下,选择 C++ 生成工具

  4. 检查安装详细信息,并确保选择了以下软件包作为可选组件

    • MSVC (例如 MSVC v142 - VS 2019 C++ x64/x86 生成工具 (v14.23) )

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

  5. 安装 Visual Studio 生成工具。

现在,您应该能够使用 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
  • lxml 需要 python3-devzlib1g-devlibxml2-devlibxslt1-dev

  • cryptography 需要 libssl-devlibffi-dev

之后,您可以在 虚拟环境 中使用 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 后,可能会遇到带有以下回溯信息的异常

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