Зачем твоему краулеру Docker
Рассказываем о пет-проекте — веб-пауке или краулере данных с сайтов с использованием Docker. Объясняем, при чём здесь Docker.
1К открытий4К показов
Docker — это инструмент, который позволяет создавать, развертывать и запускать приложения в контейнерах. Использование Docker для развертывания парсеров (или любых других приложений) имеет ряд преимуществ.
Преимущества Docker
Изолированность
Каждый Docker контейнер работает независимо. Это значит, что приложение будет работать одинаково в любой системе, на которой запущен Docker, независимо от установленных на этой системе библиотек и другого программного обеспечения. Это особенно полезно для парсеров, поскольку они могут требовать конкретные версии библиотек или других зависимостей.
Переиспользование
Docker позволяет создать образ, который затем может быть использован для создания новых контейнеров. Это означает, что вы можете настроить все необходимые для парсера зависимости один раз, а затем использовать этот образ для быстрого и легкого создания новых экземпляров парсера. В реальности многие сайты сопротивляются скрейпингу, потому умеют блокировать IP. Сменив виртуальную машину и обновив правила неактивности паука, вы потратите минимум усилий на восстановление работоспособности проекта.
Все это делает продукт идеальным инструментом для масштабирования приложений. Если ваш парсер должен обрабатывать большой объем данных, вы можете просто создать дополнительные контейнеры для распределения нагрузки.
Безопасность
Docker обеспечивает дополнительный уровень безопасности, поскольку контейнеры изолированы от хост-системы. Это означает, что даже если парсер станет целью атаки, атакующий не сможет вмешаться в работу хост-системы.
Управление версиями и обновлениями
Docker позволяет легко управлять версиями и обновлениями приложений. Вместо ручного обновления каждого экземпляра парсера вы можете просто обновить Docker-образ и затем обновить его на всех машинах.
Недостаток Docker
В 2023 году все же бытует мнение, что Docker – трата времени. Полагаю, в таких случаях речь шла о готовом контейнере с очень нужным кодом: его нашли на просторах сети и развернули один раз, попутно ругаясь из-за возможных ошибок при подъеме контейнера.
Проект: паук HeadHunter на Docker
Поисковый робот (веб-паук, краулер) — программа, являющаяся составной частью поисковой системы и предназначенная для обхода страниц Интернета с целью занесения информации о них в базу данных поисковика.
Пользователь GitHub с ником undadasea реализовал проект поиска вакансий на hh.ru с помощью docker и PostgreSQL:
Если верить описанию, код проекта сохраняет вакансии в базу данных PostgreSQL в контейнере Docker. Так что мы определенно имеем дело с типовым пауком. Если вакансии больше нет на сайте, она помечается в базе данных как «закрытая». Мониторинг проводится раз в сутки.
Простым набором команд мы клонируем репозиторий на свою машину:
А затем разворачиваем контейнер:
И это все, как же радует такая лаконичность! Конечно, я опустила момент дотяжки алгоритма поиска под свои поисковые запросы, но об этом лучше написать отдельную статью. Как вы уже догадались, помимо пауков в Docker упаковывают и другие категории ПО:
- серверы, вроде Redis, Jenkins
- базы данных, например, MongoDB
- фреймворки машинного / глубокого обучения, такие как PyTorch, Tensorflow
Если верить статье datadoghq.com, несмотря на разногласия в комьюнити, Docker все же прижился в 25% IT-компаний:
Более того, вероятность его использования возрастает с ростом инфраструктуры:
Вывод получается “с разветвлением”: если ты работаешь над крупным проектом, тебе, скорее всего, потребуется Docker, будь то паук или другой микросервис. В случае индивидуальных экспериментов разворачивание контейнера, хоть и демонстрирует преимущество в разрезе безопасности и воспроизводимости, легко становится тратой драгоценных ресурсов разработчика.
В ваших проектах используется Docker?
Да
Нет
Не знаю
Хочу посмотреть результаты
1К открытий4К показов