Мы использовали Scrapyd-Client для успешного развертывания проекта Scrapy в Scrapyd для запуска.Предпосылка заключается в том, что Scrapyd необходимо установить на сервер заранее и запустить службу Scrapyd, а этот процесс является громоздким. Если мы развернем проект Scrapy на 100 серверов одновременно, нужно ли нам вручную настраивать среду Python для каждого сервера, изменяя конфигурацию Scrapyd? Если среды Python на этих серверах имеют разные версии и в то же время выполняются другие проекты, конфликт версий вызовет ненужные проблемы.
Поэтому нам нужно решить болевую точку, а именно проблему конфигурации среды Python и разрешения конфликта версий. Если мы упакуем Scrapyd непосредственно в образ Docker, то нам нужно будет только выполнить команду Docker на сервере, чтобы запустить службу Scrapyd, поэтому нам не нужно беспокоиться о среде Python или конфликтах версий.
Далее мы упакуем Scrapyd в образ Docker.
1. Подготовка
Убедитесь, что Docker правильно установлен на этом компьютере.
2. Стыковка с Докером
Создайте новый проект и создайте новый scrapyd.conf, файл конфигурации Scrapyd, со следующим содержимым:
[scrapyd]
eggs_dir = eggs
logs_dir = logs
items_dir =
jobs_to_keep = 5
dbs_dir = dbs
max_proc = 0
max_proc_per_cpu = 10
finished_to_keep = 100
poll_interval = 5.0
bind_address = 0.0.0.0
http_port = 6800
debug = off
runner = scrapyd.runner
application = scrapyd.app.application
launcher = scrapyd.launcher.Launcher
webroot = scrapyd.website.Root
[services]
schedule.json = scrapyd.webservice.Schedule
cancel.json = scrapyd.webservice.Cancel
addversion.json = scrapyd.webservice.AddVersion
listprojects.json = scrapyd.webservice.ListProjects
listversions.json = scrapyd.webservice.ListVersions
listspiders.json = scrapyd.webservice.ListSpiders
delproject.json = scrapyd.webservice.DeleteProject
delversion.json = scrapyd.webservice.DeleteVersion
listjobs.json = scrapyd.webservice.ListJobs
daemonstatus.json = scrapyd.webservice.DaemonStatus
Вот собственно измененный файл конфигурации из официальной документации: https://scrapyd.readthedocs.io/en/stable/config.html#example-configuration-file, там два измененных места.
max_proc_per_cpu=10
, изначально 4, то есть одно ядро ЦП может выполнять до 4 задач Scrapy, то есть хост с 1 ядром может одновременно запускать только до 4 задач Scrapy, верхний предел здесь установлен на 10 , или вы можете установить его самостоятельно.bind_address = 0.0.0.0
, который изначально был 127.0.0.1 и не доступен публично. Это ограничение можно снять, изменив его на 0.0.0.0 здесь.
Создайте новый файл requirements.txt и перечислите некоторые часто используемые библиотеки в проектах Scrapy.Содержимое выглядит следующим образом:
requests
selenium
aiohttp
beautifulsoup4
pyquery
pymysql
redis
pymongo
flask
django
scrapy
scrapyd
scrapyd-client
scrapy-redis
scrapy-splash
Если работающему проекту Scrapy также необходимо использовать другие библиотеки, эти библиотеки могут быть добавлены в этот файл сами по себе.
Наконец, создайте новый Dockerfile со следующим содержимым:
FROM python:3.6
ADD . /code
WORKDIR /code
COPY ./scrapyd.conf /etc/scrapyd/
EXPOSE 6800
RUN pip3 install -r requirements.txt
CMD scrapyd
первая строкаFROM
значит вpython:3.6
Создайте сборку на основе этого образа, что означает, что среда Python 3.6 уже существует на момент сборки.
вторая линияADD
Это размещение локального кода в виртуальном контейнере. Он имеет два параметра: первый параметр.
, представляющий локальный текущий путь; второй параметр/code
Представляет путь в виртуальном контейнере, то есть размещение всего содержимого локального проекта в каталоге /code виртуального контейнера.
третий рядWORKDIR
Это необходимо для указания рабочего каталога.Здесь только что добавленный путь кода задается как рабочий путь.Структура каталогов по этому пути такая же, как и текущая локальная структура каталогов, поэтому команду установки библиотеки можно выполнить непосредственно в этом каталоге .
четвертый рядCOPY
Это копирование файла scrapyd.conf из текущего каталога в каталог /etc/scrapyd/ виртуального контейнера.Scrapyd будет читать эту конфигурацию по умолчанию при запуске.
пятый рядEXPOSE
Это заявление о том, что контейнер среды выполнения предоставляет порт службы. Обратите внимание, что это всего лишь утверждение, и среда выполнения не может открывать службу на этом порту. Функция этого оператора состоит в том, чтобы сообщить пользователю запущенный порт зеркальной службы, чтобы облегчить настройку сопоставления, а во-вторых, контейнер будет автоматически сопоставляться случайным образом при запуске и использовании случайного сопоставления портов.EXPOSE
порт.
шестой рядRUN
Это выполнение некоторых команд и, как правило, подготовка к среде. Поскольку в виртуальном контейнере Docker есть только среда Python 3, но нет библиотеки Python, мы запускаем эту команду, чтобы установить соответствующую библиотеку Python в виртуальном контейнере, чтобы проект мог нормально работать при развертывании в Scrapyd.
седьмой рядCMD
Команда запуска контейнера, которая будет выполняться при запуске контейнера. Здесь мы напрямую используем scrapyd для запуска службы Scrapyd.
Основная работа выполнена, мы запускаем следующую команду для сборки:
docker build -t scrapyd:latest .
После успешной сборки вы можете запустить тесты:
docker run -d -p 6800:6800 scrapyd
Откройте: http://localhost:6800, вы можете увидеть службу Scrapyd, как показано на следующем рисунке.
При этом образ Scrapyd Docker успешно строится и запускается.
Мы можем загрузить этот образ в Docker Hub. Например, мое имя пользователя Docker Hub — germey, и я создаю новый проект с именем scrapyd. Во-первых, я могу пометить образ, чтобы его идентифицировать:
docker tag scrapyd:latest germey/scrapyd:latest
Пожалуйста, замените его на название вашего проекта здесь.
Затем Push может:
docker push germey/scrapyd:latest
Затем запустите эту команду на других хостах, чтобы запустить службу Scrapyd:
docker run -d -p 6800:6800 germey/scrapyd
Scrapyd успешно работает на других серверах.
3. Заключение
Мы используем Docker для решения проблемы среды Python. Далее решим задачу пакетного развертывания Docker.
Этот ресурс был впервые опубликован в личном блоге Цуй Цинцай Цзин Ми:Практическое руководство по разработке веб-краулера на Python3 | Цзин Ми
Если вы хотите узнать больше информации о поисковых роботах, обратите внимание на мой личный публичный аккаунт WeChat: Coder of Attack.
WeChat.QQ.com/Day/5 Это радость VE Z…(автоматическое распознавание QR-кода)