Избавление от рекурсивного перехода при парсинге сайтов

Пишу краулер, который будет заходить по определенным сайтам и собирать информацию о страницах. Что-то типа поискогового мини-робота. При натравливании на некоторые сайты возникла проблема: есть допустим ссылка, при переходе не которую, он в урл добавляет определенный гет-параметр. При клике опять на эту же ссылку, параметр меняется. В итоге робот западает на этой ссылке. И ходит по одной и той же странице. С одной стороны логично, разный урл, разные страницы. С другой стороны один и то же контент и в рекурсии таких страниц робот накачает их бесконечное количество, пока не сработает ограничение по длине url'a.

Для примера: mega74.ru/ — если в правом верхнем углу открыть в новой вкладке «вход и регистрация», а потом не открывшейся странице проделать тоже самое, то урл будет бесконечно дополняться.

Такая же проблема часто встречается с пагинатором на битриксе от горе программистов.

Как от этого избавиться или предусмотреть так сказать защиту от дурака и исключать такие страницы в процессе краулинга?
  • Вопрос задан
  • 3388 просмотров
Пригласить эксперта
Ответы на вопрос 3
ArtEx
@ArtEx
А если попробовать фильтровать повторяющиеся переменные в адресе? т.е. на сайте из примера REQUESTED_FROM будет повторяться сколько угодно раз
Ответ написан
Комментировать
ruskar
@ruskar
Conflict Intelligence Team
Как только по URL определить что эта страница уже парсилась — не знаю. Как по контенту определить: можно, например, запоминать в базе хэш от HTML-кода страницы и потом при парсинге новой страницы смотреть, есть ли уже такой хэш в базе.
Ответ написан
vsespb
@vsespb
Подход такой — парсер должен знать структуру конкретного сайта, который он парсит. Когда он берёт ссылку, от точно знает на что она — на категорию, на итем итд. Тип ссылки в общем. При разработке парсера для конкретного сайта — смотреть на ссылки глазами (ведь и так придётся смотреть на каждую). И если там есть параметр который к делу не относится, Вы сразу это поймёте. Нужно убрать его из URL регэкспом. Или заменять на один и тот же.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы