Crawlab
Crawlab — это основанная на Golang распределённая платформа для управления краулерами, поддерживающая Python, NodeJS, Go, Java и PHP, а также различные фреймворки для краулинга.
Посмотреть демонстрацию | Документация
Существует три способа установки:
Откройте командную строку и выполните следующие команды. Убедитесь, что вы установили docker-compose
заранее.
git clone https://github.com/crawlab-team/crawlab
cd crawlab
docker-compose up -d
Затем вы можете посмотреть файл docker-compose.yml
(который содержит подробные параметры конфигурации), а также обратиться к документации, чтобы получить дополнительную информацию.
Используйте docker-compose
, чтобы запустить его одним щелчком мыши, даже не настраивая базы данных MongoDB и Redis, хотя мы рекомендуем это сделать. Создайте файл docker-compose.yml
в текущем каталоге и введите следующее содержимое.
version: '3.3'
services:
master:
image: tikazyq/crawlab:latest
container_name: master
environment:
CRAWLAB_SERVER_MASTER: "Y"
CRAWLAB_MONGO_HOST: "mongo"
CRAWLAB_REDIS_ADDRESS: "redis"
ports:
- "8080:8080"
depends_on:
- mongo
- redis
mongo:
image: mongo:latest
restart: always
ports:
- "27017:27017"
redis:
image: redis:latest
restart: always
ports:
- "6379:6379"
После этого выполните следующую команду, и Crawlab главный узел, MongoDB и Redis будут запущены. Откройте http://localhost:8080
, чтобы увидеть интерфейс.
docker-compose up
Подробности установки с помощью Docker см. в соответствующей документации.
См. соответствующую документацию. Задачи журнала
Задачи расписания
Установка языков
Установка зависимостей
Уведомления о сообщениях
Архитектура Crawlab включает в себя главный узел (Master Node) и несколько рабочих узлов (Worker Node), а также Redis и MongoDB, которые отвечают за связь и хранение данных.
Передняя часть приложения отправляет запрос главному узлу для получения данных, главный узел использует MongoDB и Redis для выполнения задач планирования и развёртывания. После получения задачи рабочий узел начинает выполнять задачу по сканированию и сохраняет результаты в MongoDB. По сравнению с версией v0.3.0 архитектура Crawlab была упрощена: из неё был исключён ненужный модуль мониторинга узлов Flower, мониторинг узлов теперь осуществляется главным образом через Redis.
Главный узел является ядром архитектуры Crawlab и относится к системе управления Crawlab.
Основные функции главного узла:
Главный узел отвечает за связь с передней частью приложения и распределяет задачи сканирования рабочим узлам через Redis. Кроме того, главный узел синхронизирует (развёртывает) задачи сканирования на рабочие узлы через Redis и MongoDB GridFS.
Основная функция рабочего узла — выполнение задач сканирования и сохранение данных сканирования и журналов, а также связь с главным узлом через PubSub Redis. Увеличивая количество рабочих узлов, Crawlab может расширяться горизонтально, и разные задачи сканирования могут быть назначены разным узлам для выполнения.
MongoDB — это база данных Crawlab, которая хранит данные об узлах, задачах сканирования, задачах планирования и т. д., а GridFS — это способ хранения файлов задач сканирования главным узлом и их синхронизации с рабочими узлами в качестве промежуточного носителя.
Redis — популярная база данных типа «ключ-значение», которая в Crawlab в основном реализует функцию связи между узлами. Например, узлы сохраняют свою информацию в списке хэшей Redis nodes, и главный узел определяет онлайн-узлы на основе списка хэшей.
Передняя часть представляет собой одностраничное приложение, основанное на Vue-Element-Admin. Оно повторно использует многие элементы управления Element-UI для поддержки соответствующего отображения.
Crawlab SDK предоставляет некоторые вспомогательные методы, чтобы помочь вашему сканеру лучше интегрироваться в Crawlab, например, сохранять результаты в Crawlab.
В settings.py найдите ITEM_PIPELINES (переменная типа dict), добавьте следующее содержимое.
ITEM_PIPELINES = {
'crawlab.pipelines.CrawlabMongoPipeline': 888,
}
Затем запустите сканер Scrapy, после завершения работы вы должны увидеть результаты сбора в Детали задачи — Результаты.
Добавьте следующий код в часть сохранения результатов вашего сканера.
# Импорт метода сохранения результата
from crawlab import save_item
# Это результат, который должен быть типа dict
result = {'name': 'crawlab'}
# Вызов метода сохранения результата
save_item(result)
Затем запустите сканер, после завершения работы вы также должны увидеть результаты сбора в Детали задачи — Результаты.
Задача сканирования по сути реализуется с помощью команды оболочки. Идентификатор задачи будет существовать в форме переменной среды CRAWLAB_TASK_ID в процессе выполнения задачи сканирования и использоваться для связывания данных сканирования. Кроме того, CRAWLAB_COLLECTION — это имя коллекции, переданное Crawlab.
В программе сканирования необходимо присвоить значение CRAWLAB_TASK_ID переменной task_id, которую можно сохранить в коллекции CRAWLAB_COLLECTION в MongoDB. Таким образом, Crawlab знает, как связать задачу сканирования с данными сканирования. В настоящее время Crawlab поддерживает только MongoDB.
Сейчас существует несколько платформ управления сканерами, так зачем использовать Crawlab?
Потому что многие существующие платформы основаны на Scrapyd, что ограничивает язык программирования и фреймворк для сканеров, и инженеры-сканеры могут использовать только scrapy и python. Конечно, scrapy — отличный фреймворк для сканирования, но он не может делать всё.
Crawlab прост в использовании и универсален, подходит практически для любого основного языка и фреймворка. Он также имеет красивый интерфейс передней части, позволяющий пользователям удобно управлять и запускать сканеры.
Фреймворк | Технология | Преимущества | Недостатки | Статистика GitHub |
---|---|---|---|---|
Crawlab | Golang + Vue | Не ограничивается scrapy, может запускать сканеры на любом языке и фреймворке, красивый интерфейс передней части, естественная поддержка распределённых сканеров, поддержка управления узлами, управления сканерами, управления задачами, планирования задач, экспорта результатов, статистики данных, уведомлений о сообщениях, настраиваемых сканеров и онлайн-редактирования кода и других функций | Временно не поддерживает управление версиями сканеров |
|
ScrapydWeb | Python Flask + Vue | Красивый интерфейс передней части, встроенный анализатор журналов scrapy, множество статистических графиков выполнения задач, поддержка управления узлами, планирования задач, напоминаний по электронной почте, мобильного интерфейса, одна из наиболее функциональных платформ управления на основе scrapy | Не поддерживает сканеры, отличные от scrapy, Python Flask используется в качестве серверной части, производительность ограничена |
|
Gerapy | Python Django + Vue | Gerapy — платформа управления сканерами от Cui Qingcai, простая установка и развёртывание, также основанная на scrapyd, с красивым интерфейсом передней части, поддержкой управления узлами, редактирования кода, настройки правил и других функций | Также не поддерживает сканеры, отличные от scrapy, и, согласно отзывам пользователей, версия 1.0 имеет много ошибок, ожидается, что версия 2.0 будет улучшена |
|
SpiderKeeper | Python Flask | Основан на scrapyd, открытый исходный код Scrapyhub, очень простой интерфейс передней части, поддерживает планирование задач | Может быть слишком простым, не поддерживает разбиение на страницы, не поддерживает управление узлами, не поддерживает сканеры, кроме scrapy |
|
Если вы используете Docker для развёртывания, проверьте, используете ли вы Docker Machine, в этом случае вам нужно ввести адрес http://192.168.99.100:8080.
Кроме того, убедитесь, что вы использовали -p 8080:8080
, чтобы сопоставить порт, и проверьте, открыт ли порт 8080 на хост-машине.
В большинстве случаев вы, вероятно, неправильно настроили переменную среды CRAWLAB_API_ADDRESS. Эта переменная сообщает передней части, какой адрес использовать для запроса данных API, поэтому вам необходимо установить его равным IP-адресу хоста + порту, например 192.168.0.1:8000. Затем перезапустите контейнер, в браузере введите IP-адрес хоста и порт, и вы сможете успешно войти в систему.
Обратите внимание, что 8080 — это порт для внешнего интерфейса, а 8000 — порт для внутреннего интерфейса. В браузере вам нужно ввести только адрес внешнего интерфейса. Не забудьте об этом различии.
Это демонстрационные пауки. Если вам нужно добавить собственного паука, упакуйте файл с вашим пауком в zip-файл, затем нажмите кнопку «Добавить паука» на странице пауков и загрузите его.
Обратите внимание, что Crawlab будет использовать имя файла как имя паука. Вы можете изменить его позже. Кроме того, не рекомендуется называть zip-файлы на китайском языке, так как это может привести к сбою загрузки.
Примечание: версия v0.3.0 теперь основана на версии Golang вместо версии Python на основе Celery. Для развёртывания обратитесь к документации.
Если вы считаете, что Crawlab полезен для вашей повседневной разработки или компании, пожалуйста, добавьте автора в WeChat tikazyq1 и укажите «Crawlab». Автор добавит вас в группу. Или вы можете отсканировать QR-код ниже, чтобы поддержать автора через Alipay.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )