Installation guide

Installing Scrapy

Scrapy在CPython(默认Python实现)和PyPy(从PyPy 5.9开始)下的Python 2.7和Python 3.5或更高版本上运行.

如果您使用的是AnacondaMiniconda ,则可以从conda- forge渠道安装该软件包,该渠道包含适用于Linux,Windows和OS X的最新软件包.

要使用安装Scrapy conda ,运行:

conda install -c conda-forge scrapy

另外,如果您已经熟悉Python软件包的安装,则可以使用以下方法从PyPI安装Scrapy及其依赖项:

pip install Scrapy

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

强烈建议您在专用的virtualenv中安装Scrapy,以避免与系统软件包冲突.

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

Things that are good to know

Scrapy是用纯Python编写的,并且依赖于一些关键的Python包(以及其他一些包):

  • lxml ,高效的XML和HTML解析器
  • parsel ,是在lxml之上编写的HTML / XML数据提取库,
  • w3lib ,一个用于处理URL和网页编码的多功能助手
  • 扭曲的异步网络框架
  • cryptography and pyOpenSSL, to deal with various network-level security needs

测试Scrapy的最低版本为:

  • 扭曲的14.0
  • lxml 3.4
  • pyOpenSSL 0.14

Scrapy可以使用这些软件包的较旧版本,但不能保证它将继续工作,因为尚未对其进行测试.

其中一些软件包本身依赖于非Python软件包,这可能需要其他安装步骤,具体取决于您的平台. 请查看以下特定于平台的指南 .

如果与这些依赖项有关的任何麻烦,请参考它们各自的安装说明:

Platform specific installation notes

Windows

尽管可以使用pip在Windows上安装Scrapy,但我们建议您安装AnacondaMiniconda并使用conda - forge渠道中的软件包,这将避免大多数安装问题.

安装AnacondaMiniconda后 ,请使用以下方法安装Scrapy:

conda install -c conda-forge scrapy

Ubuntu 14.04 or above

目前,Scrapy已使用最新版本的lxml,twisted和pyOpenSSL进行了测试,并且与最新的Ubuntu发行版兼容. 但是它也应该支持Ubuntu的较早版本,例如Ubuntu 14.04,尽管存在TLS连接的潜在问题.

不要使用Ubuntu提供的python-scrapy软件包,它们通常太旧且太慢,无法赶上最新的Scrapy.

要在Ubuntu(或基于Ubuntu的)系统上安装scrapy,您需要安装以下依赖项:

sudo apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
  • lxml需要python-devzlib1g-devlibxml2-devlibxslt1-dev
  • cryptography需要libssl-devlibffi-dev

如果要在Python 3上安装scrapy,则还需要Python 3开发标头:

sudo apt-get install python3 python3-dev

virtualenv内 ,您可以使用pip安装Scrapy之后:

pip install scrapy

Note

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

Mac OS X

建立Scrapy的依赖项需要C编译器和开发标头的存在. 在OS X上,这通常由Apple的Xcode开发工具提供. 要安装Xcode命令行工具,请打开一个终端窗口并运行:

xcode-select --install

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

  • (推荐) 不要使用系统python,安装新的更新版本,该版本应与系统的其余部分不冲突. 使用自制程序包管理器的方法如下:

    • 按照https://brew.sh/中的说明安装自制软件

    • 更新您的PATH变量,以指出应在系统软件包之前使用自制软件软件包(如果将zsh用作默认外壳,则将.bashrc更改为.zshrc ):

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

      source ~/.bashrc
      
    • 安装python:

      brew install python
      
    • 最新版本的python已捆绑了pip ,因此您无需单独安装. 如果不是这种情况,请升级python:

      brew update; brew upgrade python
      
  • (Optional) Install Scrapy inside an isolated python environment.

    此方法是上述OS X问题的解决方法,但它是管理依赖项的总体良好做法,可以补充第一种方法.

    virtualenv是可用于在python中创建虚拟环境的工具. 我们建议您阅读类似http://docs.python-guide.org/zh-CN/latest/dev/virtualenvs/的教程以开始使用.

这些解决方法中的任何一种之后,您都应该能够安装Scrapy:

pip install Scrapy

PyPy

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

现在,大多数可疑的依赖对象都具有CPython的二进制轮子,而PyPy没有. 这意味着将在安装过程中建立这些依赖关系. 在OS X上,您可能会遇到构建加密技术依赖项的问题, 此处描述此问题的解决方案,即brew install openssl ,然后导出此命令建议的标志(仅在安装scrapy时需要). 在Linux上安装除了安装构建依赖项外没有其他特殊问题. 未测试在Windows上使用PyPy安装scrapy.

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

Troubleshooting

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'

出现此异常的原因是您的系统或虚拟环境具有Twisted版本不支持的pyOpenSSL版本.

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

pip install twisted[tls]

有关详细信息,请参见问题#2473 .