安装指南
支持的 Python 版本
Scrapy 需要 Python 3.9+,可以是 CPython 实现(默认)或 PyPy 实现(参见 Alternate Implementations)。
安装 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 安装在系统范围。
相反,我们建议您将 Scrapy 安装在所谓的“虚拟环境”中(venv
)。虚拟环境可以避免与已安装的 Python 系统包冲突(这可能会破坏某些系统工具和脚本),并且仍然可以使用 pip
正常安装包(无需 sudo
等操作)。
请参阅虚拟环境和包,了解如何创建虚拟环境。
创建虚拟环境后,您就可以使用 pip
在其中安装 Scrapy,就像安装其他任何 Python 包一样。(请参阅下面的特定平台指南,了解您可能需要预先安装的非 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++ Build Tools 来安装 Visual Studio Installer。
运行 Visual Studio Installer。
在工作负载(Workloads)部分,选择 C++ build tools。
检查安装详情,确保以下包作为可选组件被选中
MSVC(例如 MSVC v142 - VS 2019 C++ x64/x86 build tools (v14.23))
Windows SDK(例如 Windows 10 SDK (10.0.18362.0))
安装 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-dev
和libxslt1-dev
是lxml
所必需的libssl-dev
和libffi-dev
是cryptography
所必需的
之后,在虚拟环境中,您可以使用 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
此方法是针对上述 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。