Как обнаружить парсер на сайте
Где именно парсер выдаёт себя и какими командами найти его в логах — укладывается в пять минут.
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. Она подделывается одной строкой кода, а заблокированный настоящий робот — это выпадение сайта из выдачи.
Что делать дальше
Найденный адрес можно закрыть в конфиге сервера. Это работает ровно до тех пор, пока парсер не сменит адрес — а с резидентными прокси у него их тысячи.
Устойчивее считать не адреса, а поведение: темп, соотношение запросов, последовательность путей. Тогда смена адреса не помогает, потому что новый ведёт себя точно так же.
И держите в голове главное ограничение: за одним адресом могут стоять живые люди. Мобильные операторы выпускают абонентов через общий выход, и заблокировав такой адрес, вы отрежете район. Проверяйте, кому принадлежит сеть, прежде чем блокировать её насовсем.
Решение по теме
Термины из статьи
Как это настроить в BotBan
Читайте также
- Защита от парсинга цен: что работает в интернет-магазине, а что только мешает покупателям Цены видит каждый покупатель, значит, их может увидеть и программа. Закрыть их полностью нельзя, а сделать парсинг дорогим можно. Разбираем, какие меры для этого работают, а какие отпугивают покупателей и поисковики сильнее, чем парсер.
- Сколько ботов приходит на сайты: данные 14 сайтов за 30 дней Месяц журнала 14 сайтов, 20,3 млн запросов к страницам: больше половины движок счёл подозрительными. Объясняем, откуда такая цифра, почему людей при этом не задевают и почему в рекламе ботов почти нет, а в формах — треть.
- Проверка сайта на ботов: бесплатные инструменты и что они на самом деле показывают Метрика не видит тех, кто не выполняет скрипт, лог не отличает Chrome от программы, назвавшейся Chrome, а проверка адреса ничего не знает о запросе. Разбираем пять бесплатных способов проверить сайт на ботов и слепое пятно каждого.