Стратегия обновления веб-сканера - PullRequest
4 голосов
/ 05 апреля 2010

Я хочу сканировать полезные ресурсы (например, фоновую картинку ..) с определенных веб-сайтов.Это не тяжелая работа, особенно с помощью таких замечательных проектов, как scrapy.

Проблема здесь в том, что я не просто хочу сканировать этот сайт ОДИН РАЗ.Я также хочу, чтобы мой сканер работал долго и сканировал обновленный ресурс.Поэтому я хочу знать, есть ли у веб-сканера хорошая стратегия для получения обновленных страниц?

Вот грубый алгоритм, о котором я подумал.Я разделил процесс сканирования на раунды.В каждом цикле хранилища URL-адресов сканеру предоставляется определенное количество (например, 10000) URL-адресов для сканирования.А потом следующий раунд.Подробные шаги:

  1. сканер добавляет стартовые URL-адреса в хранилище URL-адресов
  2. сканер запрашивает URL-адрес хранилища для не более N URL для сканирования
  3. сканер выбирает URL-адреса иобновить определенную информацию в репозитории URL, такую ​​как содержимое страницы, время выборки и было ли содержимое изменено.
  4. просто вернитесь к шагу 2

Чтобы дополнительно указать это, явсе еще нужно решить следующий вопрос: Как определить «обновление» веб-страницы, которая указывает на вероятность того, что эта веб-страница была обновлена?

Поскольку это открытый вопрос, надеюсь, он принесетЗдесь можно обсудить несколько вопросов.

1 Ответ

7 голосов
/ 18 мая 2012

Алгоритм "пакетной обработки", который вы описываете, является распространенным способом реализации этого, я работал над несколькими такими реализациями с scrapy .

Подход, который я выбрал, заключается в инициализации начальных URL-адресов вашего паука, чтобы следующий пакет сканировал и выводил данные (ресурсы + ссылки) в обычном режиме. Затем обработайте их так, как вы хотите сгенерировать следующую партию. Можно распараллелить все это, так что у вас будет много пауков, сканирующих разные пакеты одновременно, если вы поместите URL-адреса, принадлежащие одному и тому же сайту, в один пакет, тогда scrapy позаботится о вежливости (с некоторой конфигурацией для ваших предпочтений).

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

Существует много подходов к проблеме упорядочения сканирования (как определить «свежесть»), о которых вы упоминаете, и наилучший подход зависит от ваших приоритетов (свежесть и полнота, если ресурсы важнее других, и др.).

Я бы хотел порекомендовать эту статью Crawling Кристофера Олстона и Марка Наджорка. Это отличный опрос, который охватывает интересующие вас темы (модель пакетного сканирования и порядок сканирования).

...