安装指南
支持的 Python 版本
Scrapy 需要 Python 3.10+,支持 CPython 实现(默认)或 PyPy 实现(参见 替代实现)。
安装 Scrapy
如果您正在使用 Anaconda 或 Miniconda,您可以从 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,一个异步网络框架
cryptography 和 pyOpenSSL,用于处理各种网络级安全需求
其中一些软件包本身依赖于非 Python 软件包,根据您的平台,可能需要额外的安装步骤。请查看下方的 特定平台指南。
如果遇到与这些依赖项相关的任何问题,请参考它们各自的安装说明:
使用虚拟环境(推荐)
简而言之:我们建议在所有平台上都将 Scrapy 安装在虚拟环境中。
Python 软件包可以安装在全局(即系统范围)或用户空间。我们不建议在系统范围内安装 Scrapy。
相反,我们建议您在所谓的“虚拟环境” (venv) 中安装 Scrapy。虚拟环境允许您不与已安装的 Python 系统软件包冲突(这可能会损坏您的某些系统工具和脚本),并且仍然可以使用 pip 正常安装软件包(无需 sudo 等权限)。
有关如何创建虚拟环境的信息,请参阅 虚拟环境和软件包。
创建虚拟环境后,您可以像安装任何其他 Python 软件包一样,使用 pip 在其中安装 Scrapy。(有关您可能需要预先安装的非 Python 依赖项,请参阅下方的 特定平台指南)。
特定平台安装说明
Windows
虽然可以使用 pip 在 Windows 上安装 Scrapy,但我们建议您安装 Anaconda 或 Miniconda 并使用来自 conda-forge 频道的软件包,这样可以避免大多数安装问题。
安装好 Anaconda 或 Miniconda 后,请通过以下命令安装 Scrapy
conda install -c conda-forge scrapy
要在 Windows 上使用 pip 安装 Scrapy
警告
此安装方法需要“Microsoft Visual C++”来安装某些 Scrapy 依赖项,这比 Anaconda 占用更多的磁盘空间。
下载并执行 Microsoft C++ 生成工具 以安装 Visual Studio 安装程序。
运行 Visual Studio 安装程序。
在“工作负荷”部分下,选择 C++ 生成工具。
检查安装详细信息,并确保选择了以下软件包作为可选组件
MSVC (例如 MSVC v142 - VS 2019 C++ x64/x86 生成工具 (v14.23) )
Windows SDK (例如 Windows 10 SDK (10.0.18362.0))
安装 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-dev、zlib1g-dev、libxml2-dev和libxslt1-devcryptography需要libssl-dev和libffi-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。