Сканирование для конкретного домена с разными настройками для каждого домена (например, скоростью) с использованием сканера Storm

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

Я прочитал несколько руководств и протестировал Storm Crawler с некоторыми базовыми настройками. Я хотел бы использовать краулер в своем проекте, но есть определенные вещи, которые я не уверен, способен ли краулер делать или даже подходит ли он для таких случаев использования.

Я хотел бы выполнять небольшие и большие рекурсивные обходы многих веб-доменов с определенными настройками скорости и ограничением количества получаемых URL-адресов. Сканирование можно запустить отдельно в любое время с разными настройками (разная скорость, игнорирование robots.txt для этого домена, игнорирование внешних ссылок).

Вопросов:

  • Подходит ли штормовой краулер для такого сценария?
  • Могу ли я установить ограничение на максимальное количество страниц, загружаемых поисковым роботом?
  • Могу ли я установить ограничения на количество загружаемых страниц для разных доменов?
  • Могу ли я отслеживать ход сканирования отдельных доменов отдельно?
  • Могу ли я установить параметры динамически без необходимости загружать измененную топологию в шторм?
  • Можно ли приостановить или прекратить сканирование (для определенного домена)?
  • Обычно Storm Crawler работает как одна развернутая топология?

Я предполагаю, что на некоторые из этих вопросов ответ может заключаться в настройке или написании моих собственных болтов или носиков. Но я бы предпочел не изменять Fetcher Bolt или основную логику краулера, поскольку это означало бы, что я разрабатываю другого краулера.

Спасибо.


person Milan Verescak    schedule 22.05.2017    source источник


Ответы (2)


Рад, что тебе нравится StormCrawler

  • Подходит ли штормовой краулер для такого сценария?

Возможно, но вам нужно будет изменить / настроить несколько вещей.

  • Могу ли я установить ограничение на максимальное количество страниц, загружаемых поисковым роботом?

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

Механизма глобальной фильтрации по количеству URL-адресов нет, но это можно сделать. Это зависит от того, что вы используете для хранения статуса URL и соответствующих реализаций spout и status updater. Например, если вы использовали Elasticsearch для хранения URL-адресов, у вас может быть фильтр URL-адресов, который проверяет количество URL-адресов в индексе и фильтрует URL-адреса (существующие или нет) на основе этого.

  • Могу ли я установить ограничения на количество загружаемых страниц для разных доменов?

Вы можете специализировать предложенное выше решение и запрашивать количество уже известных URL-адресов для каждого домена или хоста. Это не потребует каких-либо изменений в основных элементах, а только в настраиваемом URL-фильтре.

  • Могу ли я отслеживать ход сканирования отдельных доменов отдельно?

Опять же, это зависит от того, что вы используете в качестве серверной части. Например, с помощью Elasticsearch вы можете использовать Kibana для просмотра URL-адресов для каждого домена.

  • Могу ли я установить параметры динамически без необходимости загружать измененную топологию в шторм?

Нет. Конфигурация считывается при запуске рабочих задач. Я знаю некоторых пользователей, которые написали собственную реализацию конфигурации, основанную на таблице БД, и заставили свои компоненты читать из нее, но это означало изменение большого количества кода.

  • Можно ли приостановить или прекратить сканирование (для определенного домена)?

Не для каждого домена, но вы можете добавить промежуточный болт, чтобы проверить, должен ли домен обрабатываться или нет. В противном случае вы могли бы просто потерпеть неудачу. Это снова зависит от хранилища состояний. Вы также можете добавить настраиваемый фильтр, например, к носикам ES и поле в индексе состояния. Каждый раз, когда сканирование должно быть остановлено для определенного домена, вы можете, например, изменить значение поля для всех URL-адресов, соответствующих определенному домену.

  • Обычно Storm Crawler работает как одна развернутая топология?

Да, часто.

  • Я предполагаю, что на некоторые из этих вопросов ответ может заключаться в настройке или написании моих собственных болтов или носиков. Но я бы предпочел не изменять Fetcher Bolt или основную логику краулера, поскольку это означало бы, что я разрабатываю другого краулера.

StormCrawler очень модульный, поэтому всегда есть несколько способов сделать что-то ;-)

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

person Julien Nioche    schedule 22.05.2017
comment
Большое спасибо за ваш быстрый, очень полезный и исчерпывающий ответ. :-) Еще один вопрос: вы упомянули elasticsearch как пример хранения статуса url. Я также заметил это в некоторых других сообщениях, мне интересно, как он сравнивается с хранилищем sql или другими хранилищами для статуса, потому что я всегда думал, что elasticsearch будет наиболее подходящим для индексирования документов, а не для частых обновлений статуса URL. Еще раз спасибо. - person Milan Verescak; 22.05.2017
comment
Привет, Милан. бэкэнд ES, вероятно, наиболее широко используется с SC, поскольку он имеет отличные характеристики, масштабируемость и отличные функциональные возможности, например с Кибаной. SQL почти не использовался и по сравнению с ним довольно прост. - person Julien Nioche; 23.05.2017

У вас есть очень интересные вопросы. Думаю, вы можете узнать больше здесь: код: https://github.com/DigitalPebble/storm-crawler официальное руководство: http://stormcrawler.net/ и некоторые ответы: http://2015.berlinbuzzwords.de/sites/2015.berlinbuzzwords.de/files/media/documents/julien_nioche-low_latency_scalable_web_crawling_on_apache_storm.pdf

person Vasyl Lyashkevych    schedule 22.05.2017