Инструкция по установке

Поддерживаемые версии Python

Для Scrapy требуется Python 3.6+, либо реализация CPython (по умолчанию), либо реализация PyPy 7.2.0+ (см. Альтернативные реализации).

Установка Scrapy

Если вы используете Anaconda или Miniconda, вы можете установить пакет с канала conda-forge, на котором есть актуальные пакеты для Linux, Windows и macOS.

Чтобы установить Scrapy с помощью conda, выполните:

conda install -c conda-forge scrapy

В качестве альтернативы, если вы уже знакомы с установкой пакетов Python, вы можете установить Scrapy и его зависимости из PyPI с помощью:

pip install Scrapy

Мы настоятельно рекомендуем вам установить Scrapy в специализированном virtualenv, чтобы избежать конфликта с вашими системными пакетами.

Обратите внимание, что иногда это может потребовать решения проблем компиляции для некоторых зависимостей Scrapy в зависимости от вашей операционной системы, поэтому обязательно проверьте файл Замечания по установке для конкретной платформы.

Более подробные инструкции и особенности платформы, а также информацию по устранению неполадок читайте далее.

То, что полезно знать

Scrapy написан на чистом Python и зависит от нескольких ключевых пакетов Python (среди прочих):

  • lxml, эффективный анализатор XML и HTML

  • parsel, библиотека извлечения данных HTML/XML, написанная поверх lxml,

  • w3lib, многоцелевой помощник для работы с URL-адресами и кодировками веб-страниц

  • twisted, фреймворк для асинхронных сетей

  • cryptography и pyOpenSSL для решения различных задач безопасности на уровне сети

Минимальные версии, с которыми тестируется Scrapy — это:

  • Twisted 14.0

  • lxml 3.4

  • pyOpenSSL 0.14

Scrapy может работать со старыми версиями данных пакетов, но не гарантируется, что он будет продолжать работать, потому что он не тестируется на них.

Некоторые из данных пакетов зависят от пакетов, отличных от Python, для которых могут потребоваться дополнительные шаги по установке в зависимости от вашей платформы. Пожалуйста, сверьтесь с руководством для конкретных платформ ниже.

В случае возникновения каких-либо проблем, связанных с этими зависимостями, обратитесь к соответствующим инструкциям по установке:

  • установка lxml

  • установка cryptography

Замечания по установке для конкретной платформы

Windows

Хотя можно установить Scrapy в Windows с помощью pip, мы рекомендуем вам установить Anaconda или Miniconda и использовать пакет из канала conda-forge, что позволит избежать большинства проблем с установкой.

После того, как вы установили Anaconda или Miniconda, установка Scrapy с:

conda install -c conda-forge scrapy

Чтобы установить Scrapy в Windows, используйте pip:

Предупреждение

Данный метод установки требует «Microsoft Visual C++» для установки некоторых зависимостей Scrapy, которые требуют значительно больше дискового пространства, чем Anaconda.

  1. Загрузите и запустите Microsoft C++ Build Tools, чтобы установить установщик Visual Studio.

  2. Запустите установщик Visual Studio.

  3. В разделе «Workloads» выберите C++ build tools.

  4. Проверить сведения об установке и убедиться, что следующие пакеты выбраны в качестве дополнительных компонентов:

    • MSVC (например, MSVC v142 — VS 2019 C++ x64/x86 build tools (v14.23))

    • Windows SDK (например, Windows 10 SDK (10.0.18362.0))

  5. Устанавливает инструменты сборки Visual Studio.

Теперь у вас должна получиться установка Scrapy, используя pip.

Ubuntu 14.04 или выше

Scrapy в настоящее время протестирован с достаточно свежими версиями lxml, twisted и pyOpenSSL и совместим с последними дистрибутивами Ubuntu. Но он также должен поддерживать более старые версии Ubuntu, такие как Ubuntu 14.04, хотя и с потенциальными проблемами с подключениями TLS.

Не надо использовать пакет python-scrapy, предоставляемый Ubuntu, он, как правило, слишком старый и медленный, чтобы догнать последнюю версию Scrapy.

Чтобы установить Scrapy в системах на базе Ubuntu (или Ubuntu), вам необходимо установить данные зависимости:

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-dev

  • Для cryptography требуются libssl-dev и libffi-dev

Внутри virtualenv вы можете установить Scrapy с pip после этого:

pip install scrapy

Примечание

Те же зависимости, отличные от Python, можно использовать для установки Scrapy в Debian Jessie (8.0) и выше.

macOS

Для построения зависимостей Scrapy требуется наличие компилятора C и заголовков для разработки. В macOS это обычно обеспечивается средствами разработки Apple Xcode. Чтобы установить инструменты командной строки Xcode, открыть окно терминала и запустить:

xcode-select --install

Есть известная проблема, которая не позволяет pip обновлять системные пакеты. Необходимо устранить для успешной установки Scrapy и его зависимостей. Вот несколько предлагаемых решений:

  • (Рекомендация) Не надо использовать системный Python, устанавливает новую обновленную версию, которая не конфликтует с остальной частью вашей системы. Вот как это сделать с помощью диспетчера пакетов homebrew:

    • Устанавливает homebrew, следуя инструкциям на оф. сайте разработчика

    • Обновляет переменную PATH, чтобы указать, что пакеты homebrew должны использоваться перед системными пакетами (заменить .bashrc на .zshrc соответственно, если вы используете zsh в качестве оболочки по умолчанию):

      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
      
  • (По желанию) Установка Scrapy в виртуальной среде Python..

Данный метод является обходным решением для указанной выше проблемы с macOS, но в целом он является хорошей практикой для управления зависимостями и может дополнять первый метод.

После любого из данных обходных путей вы сможете установить Scrapy:

pip install Scrapy

PyPy

Мы рекомендуем использовать последнюю версию PyPy. Протестированная версия — 5.9.0. Для PyPy3 тестировалась только установка на Linux.

У большинства зависимостей Scrapy теперь есть двоичные wheels для CPython, но не для PyPy. Это означает, что данные зависимости будут построены во время установки. В macOS вы, вероятно, столкнетесь с проблемой построения зависимости криптографии, т. е. brew install openssl, а затем экспортируйте флаги, которые рекомендует эта команда (требуется только при установке Scrapy). Установка в Linux не имеет особых проблем, кроме установки зависимостей сборки. Установка Scrapy с PyPy в Windows не тестировалась.

Вы можете проверить правильность установки Scrapy, запустив scrapy bench. Если эта команда выдаёт ошибки, такие как 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 не поддерживает.

Чтобы установить версию pyOpenSSL, которую поддерживает ваша версия Twisted, переустановите Twisted с дополнительным параметром tls:

pip install twisted[tls]

Подробнее см. Issue #2473.