Гусеницы просты в концепции.
Вы получаете корневую страницу через HTTP GET, анализируете ее, чтобы найти URL-адреса, и помещаете их в очередь, если они уже не были проанализированы (поэтому вам нужна глобальная запись страниц, которые вы уже проанализировали).
Вы можете использовать заголовок Content-type, чтобы узнать, какой тип контента, и ограничить свой сканер только синтаксическим анализом типов HTML.
Вы можете вырезать теги HTML, чтобы получить простой текст, с помощью которого вы можете выполнить анализ текста (чтобы получить теги и т. Д., Содержимое страницы). Вы даже можете сделать это с помощью тегов alt / title для изображений, если вы продвинулись в этом.
А в фоновом режиме у вас может быть пул потоков, которые получают URL-адреса из очереди и делают то же самое. Вы хотите ограничить количество потоков, конечно.