Как обнаружить парсер на сайте
Где именно парсер выдаёт себя и какими командами найти его в логах — укладывается в пять минут.
3 мин чтения
Парсер редко прячется всерьёз. Он оставляет в логах характерный след, и чтобы его увидеть, хватает нескольких команд.
Признак первый: темп
Человек читает страницу товара минимум полминуты. Парсер обходит по несколько страниц в секунду.
Посчитайте самые активные адреса за день:
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -rn | head -20
Если у верхних строк счётчик в тысячах, а сайт небольшой — это не люди.
Признак второй: только HTML
Браузер, открыв страницу, тут же тянет стили, шрифты и картинки. На одну страницу приходится десяток-другой дополнительных запросов. Парсеру нужны только данные.
Посчитайте для подозрительного адреса соотношение:
grep '203.0.113.7' access.log | grep -c '\.html\|/catalog'
grep '203.0.113.7' access.log | grep -c '\.css\|\.js\|\.jpg\|\.png\|\.woff'
У человека вторая цифра больше первой в разы. У парсера вторая близка к нулю.
Признак третий: последовательность
Человек прыгает: открыл товар, вернулся, ушёл в другую категорию. Парсер идёт подряд.
grep '203.0.113.7' access.log | awk '{print $7}' | head -40
Если видите ?page=1, ?page=2, ?page=3 подряд — вопрос закрыт.
Признак четвёртый: User-Agent
awk -F'"' '{print $6}' access.log | sort | uniq -c | sort -rn | head -20
Ищите python-requests, Go-http-client, curl, Scrapy, Java,
okhttp. Одинаковый User-Agent у сотен тысяч запросов с разных адресов
тоже подозрителен: настоящие браузеры дают разброс версий.
Признак пятый: нет Referer
При переходе внутри сайта браузер сообщает, с какой страницы пришёл. Парсер, дёргающий адреса из списка, обычно нет.
Как отличить от поискового робота
Робот тоже обходит каталог подряд и тоже не грузит картинки. Отличие одно, зато надёжное: принадлежность адреса.
host 66.249.66.1
У настоящего Googlebot ответ будет вида crawl-66-249-66-1.googlebot.com.
Дальше проверьте обратно:
host crawl-66-249-66-1.googlebot.com
Адрес должен совпасть с исходным. Если хоть одна из проверок не прошла —
это не поисковик, а кто-то, прикрывшийся его именем. У Яндекса зоны
yandex.ru, yandex.net, yandex.com.
Никогда не определяйте робота по строке User-Agent. Она подделывается одной строкой кода, а заблокированный настоящий робот — это выпадение сайта из выдачи.
Что делать дальше
Найденный адрес можно закрыть в конфиге сервера. Это работает ровно до тех пор, пока парсер не сменит адрес — а с резидентными прокси у него их тысячи.
Устойчивее считать не адреса, а поведение: темп, соотношение запросов, последовательность путей. Тогда смена адреса не помогает, потому что новый ведёт себя точно так же.
И держите в голове главное ограничение: за одним адресом могут стоять живые люди. Мобильные операторы выпускают абонентов через общий выход, и заблокировав такой адрес, вы отрежете район. Проверяйте, кому принадлежит сеть, прежде чем блокировать её насовсем.
Читайте также
- Как посчитать долю ботов на своём сайте Средние цифры по рынку бесполезны: доля ботов зависит от тематики и от того, кому вы интересны. Как получить свою цифру, а не среднюю по рынку.
- Защита интернет-магазина от ботов: что настроить в первую очередь У магазина больше уязвимых мест, чем у обычного сайта, и больше того, что нельзя ломать. Порядок настройки — шаг за шагом.
- Логи nginx: как найти ботов за десять минут Восемь команд, которые дают представление о том, кто ходит по вашему сайту. Копируются и работают без подготовки.