Koenig, Хех. Я всё как-то хотел написать, но руки не доходили.
На мой взгляд всё элементарно.
1. Получаем контент точки входа, т.е. главной страницы.
2. Сохраняем все ссылки, которые были на ней обнаружены в память.
3. Обходим ссылки.
4. Сохраняем ссылки с полученных страниц в память, попутно пропуская уже существующие.
И так до конца дерева, пока дифф для каждой из конечных ссылок не станет равным нулю.