Введение
Scrapy — это фреймворк для веб-сканирования с открытым исходным кодом, написанный на Python. Первоначально созданный для парсинга веб-страниц, его также можно использовать для извлечения данных с помощью API или в качестве веб-краулера общего назначения.
Scrapy работает на Python 3.5 или новее с CPython (реализация Python по умолчанию) и PyPy (начиная с PyPy 5.9).
В этом руководстве мы покажем вам, как создать и запустить веб-паук с помощью Scrapy на вашем сервере Ubuntu 20.04 LTS Focal Fossa для извлечения информации с веб-страниц с помощью различных методов.
Если вы хотите установить Scrapy на удаленный сервер, продолжайте читать, в противном случае пропустите первый абзац «Подключение к серверу» и прочитайте следующий.
Подключение к серверу
Чтобы получить доступ к серверу, вам нужно знать IP-адрес. Вам также потребуется ваше имя пользователя и пароль для аутентификации. Чтобы подключиться к серверу как root, введите следующую команду:
ssh root@IP_DEL_SERVER
Далее вам нужно будет ввести пароль пользователя root.
Если вы не используете пользователя root, вы можете войти под другим именем пользователя с помощью той же команды, а затем изменить root на свое имя пользователя:
ssh nome_utente@IP_DEL_SERVER
Затем вам будет предложено ввести пароль пользователя.
Стандартный порт для подключения по ssh — 22, если ваш сервер использует другой порт, вам нужно будет указать его с помощью параметра -p, затем введите следующую команду:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Использовать виртуальную среду (рекомендуется)
Мы рекомендуем устанавливать Scrapy в виртуальной среде на всех платформах.
Пакеты Python можно устанавливать глобально (т. е. общесистемно) или в пользовательском пространстве. Не рекомендуется устанавливать системную флешку Scrapy.
Вместо этого мы рекомендуем вам установить Scrapy в так называемой виртуальной среде. Виртуальные среды позволяют вам не конфликтовать с уже установленными системными пакетами Python (которые могут сломать некоторые системные инструменты и скрипты) и по-прежнему нормально устанавливать пакеты с помощью pip
(без sudo
и тому подобного).
Для получения дополнительной информации читайте: Виртуальные среды и пакеты.
Установите Scrapy на Ubuntu
В настоящее время Scrapy тестируется с довольно свежими версиями lxml, twisted и pyOpenSSL и совместим с последними дистрибутивами Ubuntu. Но он также должен поддерживать более старые версии Ubuntu, такие как Ubuntu 14.04, хотя и с потенциальными проблемами с соединениями TLS.
python-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
.
pippip3pythonpython3
pip3 install scrapy
Установите Scrapy с помощью conda
Если вы используете Anaconda или Miniconda, вы можете установить пакет с канала conda-forge, где есть обновленные пакеты для Linux, Windows и macOS.
conda install -c conda-forge scrapy
В качестве альтернативы, если вы уже знакомы с установкой пакетов Python, вы можете установить Scrapy и его зависимости PyPI с помощью:
pip3 install Scrapy
pippip3pythonpython3
Создайте новый проект с помощью Scrapy.
Давайте посмотрим, как использовать Scrapy, начнем с создания нового проекта с помощью следующей команды терминала:
sudo scrapy startproject esempio
Войдите во вновь созданную папку с помощью команды cd:
cd esempio
Вновь созданный каталог проекта будет иметь следующую структуру:
esempio/scrapy.cfg # file di configurazione per il deploy
esempio/# module del progetto Python
__init__.py
items.py
middlewares.py
pipelines.py
settings.py # Impostazioni del progetto
spiders/__init__.py
Используйте Скрейпи
Scrapy позволяет загружать HTML-контент веб-страниц и извлекать из них информацию с помощью различных методов, таких как селекторы CSS. Чтобы облегчить этот процесс, Scrapy предоставляет «оболочку» для проверки экстраполяции информации в режиме реального времени.
Давайте посмотрим на краткий пример того, как поймать последнюю статью на reddit.com:
sudo scrapy shell "reddit.com"
Вы должны получить вывод, подобный следующему:
...
[s] Available Scrapy objects:
[s] scrapy scrapy module (contains scrapy.Request, scrapy.Selector, etc)
[s] crawler <scrapy.crawler.Crawler object at 0x7fd0494600a0>
[s] item {}
[s] request <GET http://reddit.com>
[s] response <200 https://www.reddit.com/>
[s] settings <scrapy.settings.Settings object at 0x7fd04945dd30>
[s] spider <DefaultSpider 'default' at 0x7fd048fc91f0>
[s] Useful shortcuts:
[s] fetch(url[, redirect=True]) Fetch URL and update local objects (by default, redirects are followed)
[s] fetch(req) Fetch a scrapy.Request and update local objects
[s] shelp() Shell help (print this help)
[s] view(response) View response in a browser
>>>
Чтобы получить заголовок первого поста, вы можете использовать селектор article h3::text
:
response.css('article h3::text')[0].get()
Вы должны вывести заголовок последней статьи Reddit. Затем выйдите из оболочки с помощью следующей команды:
exit()
Вывод
В этом руководстве мы увидели, как установить и использовать среду веб-сканирования Scrapy в Ubuntu 20.04 LTS Focal Fossa.