Как распределять пауков по кластеру с помощью Scrapyd и ScrapydWeb? - PullRequest
0 голосов
/ 06 мая 2020

Я работаю в проекте сканирования, используя Scrapy, и мне нужно распределить своих пауков по разным узлам в кластере, чтобы ускорить процесс. Я использую ScrapydWeb для управления им, и я уже настроил две машины, на одной из них включен ScrapydWeb, а на обеих - Scrapyd. Веб-приложение распознает оба, и я могу правильно запустить своего паука. Проблема в том, что сканирование выполняется параллельно (контент извлекается обеими машинами), и моей целью было сделать это распределенным способом, чтобы минимизировать время сканирования.

Кто-нибудь может мне помочь? Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Я не думаю, что Scrapyd и ScrapydWeb предлагают возможность запускать пауков на разных серверах, кроме как полностью запускать одного и того же паука. Если вы хотите распределить сканирование, вы можете:

  • Запустить 1 паука только на 1 сервере
  • Если вам нужно реальное распределенное сканирование (где один и тот же паук работает на разных машинах без нескольких машины, анализирующие один и тот же URL-адрес), вы можете посмотреть Scrapy-Cluster
  • Вы можете написать собственный код, где у вас есть 1 процесс, генерирующий URL-адреса для очистки с одной стороны, поместите найденные URL-адреса в очередь (с использованием Redis fe), и несколько серверов выталкивают URL-адреса из этой очереди для извлечения и анализа страницы
0 голосов
/ 10 августа 2020

Я использовал Scrapy Cluster для решения проблемы и делюсь своим опытом:

Docker установка была сложной для меня, чтобы контролировать и отлаживать, поэтому я попробовал Cluster Quick-start, и он работал лучше .

В моем кластере доступно пять машин, и я использовал одну для размещения Apache Kafka, а также Zookeeper. Еще у меня был один для Redis DB. Важно убедиться, что эти машины доступны для внешнего доступа с тех, которые вы собираетесь использовать для пауков.

После того, как эти три компонента были правильно установлены и запущены, я установил требования Scrapy Cluster в python3. 6 среда. Затем я настроил файл локальных настроек с IP-адресами для хостов и убедился, что все онлайн- и офлайн-тесты пройдены.

Все настроено, я смог запустить первого паука (пример в официальной документации приводится ). Идея состоит в том, что вы создаете экземпляры для своего паука (вы можете, например, использовать tmux, чтобы открыть 10 разных терминалов windows и запустить по одному экземпляру на каждом). Когда вы загружаете Apache Kafka с URL-адресом для сканирования, он отправляется в очередь в Redis, где ваши экземпляры будут периодически искать новую страницу для сканирования.

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

После сканирования страницы результат отправляется в топи Kafka c.

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

...