安装指南¶
支持的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包,这些包可能需要根据您的平台进行额外的安装步骤。请查看下面的平台特定指南。
如果遇到与这些依赖项相关的任何问题,请参考它们各自的安装说明:
使用虚拟环境(推荐)¶
TL;DR: 我们建议在所有平台上在虚拟环境中安装Scrapy。
Python 包可以全局安装(也称为系统范围内),也可以在用户空间内安装。我们不建议在系统范围内安装 Scrapy。
相反,我们建议您在所谓的“虚拟环境”中安装Scrapy(venv)。
虚拟环境允许您不与已安装的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++ Build Tools 以安装 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
python3-dev,zlib1g-dev,libxml2-dev和libxslt1-dev是lxml所需的libssl-dev和libffi-dev是cryptography所需的
在virtualenv中,
你可以使用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/中的说明安装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的二进制轮子,但没有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' 对象没有属性 '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。