Распределенное развертывание Scrapyd для распределенного развертывания сканера

сервер рептилия API Scrapy

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

Мы предполагаем следующие сценарии.

  • Если код развертывается путем загрузки файла, мы сначала сжимаем код, затем загружаем файл на сервер с помощью SFTP или FTP, а затем подключаемся к серверу для распаковки файла.Каждый сервер необходимо настроить таким образом.

  • Если код развертывается с помощью синхронизации Git, мы можем сначала отправить код в репозиторий Git, а затем удаленно подключиться к каждому хосту, чтобы выполнить операцию извлечения для синхронизации кода.Каждый сервер также должен выполнить одну операцию.

Если код вдруг обновляется, то приходится обновлять каждый сервер, и в случае, если версия какого хоста плохо контролируется, это может повлиять на общую ситуацию с распределенным обходом.

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

В этом разделе мы рассмотрим Scrapyd, инструмент, обеспечивающий распределенное развертывание.

1. Понимание Scrapyd

Scrapyd — это служебная программа, которая запускает сканеры Scrapy и предоставляет ряд HTTP-интерфейсов, которые помогают нам развертывать, запускать, останавливать и удалять сканеры. Scrapyd поддерживает управление версиями, а также может управлять несколькими задачами сканера.С его помощью мы можем легко выполнить планирование задач развертывания проектов сканера Scrapy.

2. Подготовка

Убедитесь, что Scrapyd правильно установлен на локальном компьютере или сервере.

3. Посетите Скрэпид

После установки и запуска Scrapyd мы можем получить доступ к порту 6800 сервера и увидеть страницу WebUI. Например, адрес моего сервера 120.27.34.25, тогда я могу открыть его в локальном браузере: http://120.27.34.25:6800 и увидеть домашнюю страницу Scrapyd. Его можно заменить адресом вашего сервера, как показано ниже.Если вы успешно заходите на эту страницу, проблем с конфигурацией Scrapyd нет.

В-четвертых, функция Scrapyd

Scrapyd предоставляет ряд HTTP-интерфейсов для реализации различных операций. Взяв в качестве примера IP-адрес 120.27.34.25, на котором находится Scrapyd, мы можем разобраться в функциях интерфейса.

1. daemonstatus.json

Этот интерфейс отвечает за просмотр текущего состояния сервиса и задач Scrapyd. мы можем использоватьcurlкоманда для запроса этого интерфейса, команда выглядит следующим образом:

curl http://139.217.26.30:6800/daemonstatus.json

Мы получим следующий результат:

{"status": "ok", "finished": 90, "running": 9, "node_name": "datacrawl-vm", "pending": 0}

Возвращаемый результат представляет собой строку JSON,statusтекущее рабочее состояние,finishedПредставляет текущую завершенную задачу Scrapy,runningпредставляет запущенную задачу Scrapy,pendingПредставляет задачу Scrapyd, ожидающую планирования,node_nameэто имя хоста.

2. addversion.json

Этот интерфейс в основном используется для развертывания проектов Scrapy. Сначала мы упаковываем проект в файл Egg, а затем передаем имя проекта и версию развертывания.

Мы можем реализовать развертывание проекта следующими способами:

curl http://120.27.34.25:6800/addversion.json -F project=wenbo -F version=first -F egg=@weibo.egg

это здесь,-FПредставляет собой добавление параметра, и нам также нужно упаковать проект в файл Egg и поместить его локально.

После выполнения запроса мы можем получить следующие результаты:

{"status": "ok", "spiders": 3}

Этот результат указывает на то, что развертывание прошло успешно и количество поисковых роботов равно 3.

Этот метод развертывания может быть громоздким, и позже будут представлены более удобные инструменты для реализации развертывания проекта.

3. schedule.json

Этот интерфейс отвечает за планирование запуска развернутых проектов Scrapy.

Мы можем реализовать планирование задач со следующим интерфейсом:

curl http://120.27.34.25:6800/schedule.json -d project=weibo -d spider=weibocn

Здесь вам нужно передать два параметра,projectто есть имя проекта Scrapy,spiderА именно имя Паука.

Возвращаемые результаты следующие:

{"status": "ok", "jobid": "6487ec79947edab326d6db28a2d86511e8247444"}

statusПредставляет начало проекта Scrapy,jobidПредставляет кодовое имя текущей задачи сканирования.

4. cancel.json

Этот интерфейс можно использовать для отмены задачи сканирования. Если эта задачаpendingсостоянии, она будет удалена, если задачаrunningсостояние, оно будет прекращено.

Мы можем отменить выполнение задачи с помощью следующей команды:

curl http://120.27.34.25:6800/cancel.json -d project=weibo -d job=6487ec79947edab326d6db28a2d86511e8247444

Здесь вам нужно передать два параметра,projectто есть название проекта,jobТо есть код задачи сканирования.

Возвращаемые результаты следующие:

{"status": "ok", "prevstate": "running"}

statusот имени исполнения запроса,prevstateПредставляет предыдущее рабочее состояние.

5. listprojects.json

Этот интерфейс используется для отображения всех описаний проектов, развернутых в службе Scrapyd.

Мы можем получить все описания проектов на сервере Scrapyd с помощью следующей команды:

curl http://120.27.34.25:6800/listprojects.json

Здесь нет необходимости передавать какие-либо параметры.

Возвращаемые результаты следующие:

{"status": "ok", "projects": ["weibo", "zhihu"]}

statusот имени исполнения запроса,projectsпредставляет собой список имен проектов.

6. listversions.json

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

Мы можем получить номер версии проекта с помощью следующей команды:

curl http://120.27.34.25:6800/listversions.json?project=weibo

Здесь требуется параметрproject, что является названием проекта.

Возвращаемые результаты следующие:

{"status": "ok", "versions": ["v1", "v2"]}

statusот имени исполнения запроса,versionsсписок номеров версий.

7. listspiders.json

Этот интерфейс используется для получения всех имен пауков последней версии проекта.

Мы можем получить имя паука проекта с помощью следующей команды:

curl http://120.27.34.25:6800/listspiders.json?project=weibo

Здесь требуется параметрproject, что является названием проекта.

Возвращаемые результаты следующие:

{"status": "ok", "spiders": ["weibocn"]}

statusот имени исполнения запроса,spidersпредставляет собой список имен пауков.

8. listjobs.json

Этот интерфейс используется для получения подробной информации обо всех задачах, выполняемых в настоящее время для проекта.

Мы можем получить все детали задачи с помощью следующей команды:

curl http://120.27.34.25:6800/listjobs.json?project=weibo

Здесь требуется параметрproject, что является названием проекта.

Возвращаемые результаты следующие:

{"status": "ok",
 "pending": [{"id": "78391cc0fcaf11e1b0090800272a6d06", "spider": "weibocn"}],
 "running": [{"id": "422e608f9f28cef127b3d5ef93fe9399", "spider": "weibocn", "start_time": "2017-07-12 10:14:03.594664"}],
 "finished": [{"id": "2f16646cfcaf11e1b0090800272a6d06", "spider": "weibocn", "start_time": "2017-07-12 10:14:03.594664", "end_time": "2017-07-12 10:24:03.594664"}]}

statusот имени исполнения запроса,pendingsпредставляет текущую ожидающую задачу,runningпредставляет текущую запущенную задачу,finishedПредставляет выполненную задачу.

9. delversion.json

Этот интерфейс используется для удаления определенной версии проекта.

Мы можем удалить версию проекта с помощью следующей команды:

curl http://120.27.34.25:6800/delversion.json -d project=weibo -d version=v1

Здесь требуется параметрproject, которое является названием проекта, а также требует параметрversion, которая является версией проекта.

Возвращаемые результаты следующие:

{"status": "ok"}

statusПредставляет выполнение запроса, что означает успешное удаление.

10. delproject.json

Этот интерфейс используется для удаления элемента.

Мы можем удалить элемент с помощью следующей команды:

curl http://120.27.34.25:6800/delproject.json -d project=weibo

Здесь требуется параметрproject, что является названием проекта.

Возвращаемые результаты следующие:

{"status": "ok"}

statusПредставляет выполнение запроса, что означает успешное удаление.

Все вышеперечисленные интерфейсы являются интерфейсами Scrapyd. Мы можем напрямую запросить HTTP-интерфейс для управления развертыванием, запуском и работой проекта.

Пять, использование Scrapyd API

Вышеуказанные интерфейсы могут быть не очень удобными в использовании. Неважно, есть также API-библиотека Scrapyd, которая инкапсулирует эти интерфейсы.Способ установки описан в главе 1.

Давайте посмотрим, как использовать Scrapyd API. Основной принцип Scrapyd API такой же, как метод запроса в интерфейсе HTTP, но упакованная библиотека Python более удобна в использовании.

Мы можем создать объект API Scrapyd следующим образом:

from scrapyd_api import ScrapydAPI
scrapyd = ScrapydAPI('http://120.27.34.25:6800')

Вызовите его методы для реализации операции соответствующего интерфейса.Например, операцию развертывания можно использовать следующим образом:

egg = open('weibo.egg', 'rb')
scrapyd.add_version('weibo', 'v1', egg)

Таким образом, мы можем упаковать проект как файл Egg, а затем развернуть локально упакованный проект Egg на удаленном Scrapyd.

Кроме того, Scrapyd API также реализует весь интерфейс API, предоставляемое Scrapyd имя такое же, параметры такие же.

Например, вызовlist_projects()метод для вывода списка всех развернутых проектов в Scrapyd:

scrapyd.list_projects()
['weibo', 'zhihu']

Есть и другие методы, которые здесь не перечислены, названия и параметры те же. Для более подробных операций обратитесь к официальной документации: http://python-scrapyd-api.readthedocs.io/.

6. Заключение

В этом разделе представлено связанное использование Scrapyd и API Scrapyd, с помощью которого мы можем развертывать проекты и контролировать выполнение задач через интерфейс HTTP. Однако процесс развертывания немного неудобен: проект должен сначала упаковать файл Egg, а затем загрузить его, что громоздко. В следующем разделе мы представляем более удобный инструмент для завершения процесса развертывания.


Этот ресурс был впервые опубликован в личном блоге Цуй Цинцай Цзин Ми:Практическое руководство по разработке веб-краулера на Python3 | Цзин Ми

Если вы хотите узнать больше информации о поисковых роботах, обратите внимание на мой личный публичный аккаунт WeChat: Coder of Attack.

WeChat.QQ.com/Day/5 Это радость VE Z…(автоматическое распознавание QR-кода)