Алгоритм "пакетной обработки", который вы описываете, является распространенным способом реализации этого, я работал над несколькими такими реализациями с scrapy .
Подход, который я выбрал, заключается в инициализации начальных URL-адресов вашего паука, чтобы следующий пакет сканировал и выводил данные (ресурсы + ссылки) в обычном режиме. Затем обработайте их так, как вы хотите сгенерировать следующую партию. Можно распараллелить все это, так что у вас будет много пауков, сканирующих разные пакеты одновременно, если вы поместите URL-адреса, принадлежащие одному и тому же сайту, в один пакет, тогда scrapy позаботится о вежливости (с некоторой конфигурацией для ваших предпочтений).
Интересный трюк - разбить расписание на краткосрочные (внутри одной партии, внутри скрапа) и долгосрочные (между партиями обхода), что дает некоторые преимущества более инкрементального подхода, сохраняя при этом некоторые вещи немного проще.
Существует много подходов к проблеме упорядочения сканирования (как определить «свежесть»), о которых вы упоминаете, и наилучший подход зависит от ваших приоритетов (свежесть и полнота, если ресурсы важнее других, и др.).
Я бы хотел порекомендовать эту статью Crawling Кристофера Олстона и Марка Наджорка. Это отличный опрос, который охватывает интересующие вас темы (модель пакетного сканирования и порядок сканирования).