Как парсить сайт с защитой от ботов: рабочие методы
Защита от ботов срабатывает не потому, что сайт «узнал парсер», а потому что запрос не похож на запрос человека — по адресу, по отпечатку клиента, по темпу или по маршруту. Разберём по слоям: что именно ловит, что помогает, и почему сбор данных ломается не в первый день, а на третьей неделе.
Сначала поймите, какой слой вас блокирует
Антибот — это не один рубильник, а несколько независимых проверок. Скрипт может проходить три из них и падать на четвёртой, поэтому «добавить User-Agent» обычно ничего не меняет. Слои, которые встречаются чаще всего:
- адрес и сеть: дата-центровые диапазоны и зарубежные адреса видно сразу, у многих российских сайтов для них отдельный режим;
- отпечаток соединения и клиента: набор и порядок заголовков, параметры TLS, отсутствие того, что реальный браузер отправляет всегда;
- отпечаток браузера: JavaScript, который проверяет свойства окружения и наличие признаков автоматизации;
- поведение: нет переходов по сайту, нет куки, карточки открываются подряд по списку;
- частота: сотня запросов в минуту с одного адреса — самый простой и самый надёжный признак.
Диагностика начинается с того, что сайт реально вернул. Код 403 и мгновенная капча — чаще всего адрес и отпечаток. Капча после десятков страниц — темп. Страница отдалась, а нужных данных в ней нет — контент подгружается скриптом. Отдельный случай: данные есть, но неправильные — часть сайтов подменяет содержимое вместо блокировки, и это хуже явного бана, потому что тихо портит выгрузку.
Что помогает: настоящий браузер и местный адрес
Мы собираем данные реальным браузером с российского адреса. Браузер решает слои отпечатка и JavaScript целиком: страница выполняется так же, как у человека, и подделывать нечего. Российский адрес снимает вторую половину проблемы — сайты, которые из-за рубежа сразу показывают капчу, из локальной сети отдают обычную страницу.
Дальше всё решает аккуратность, а не хитрость:
- держать сессию и куки, а не начинать с нуля на каждой странице;
- идти по сайту маршрутом человека: поиск или категория, потом карточка;
- темп ниже лимита — сбор на два часа стабильнее, чем на две минуты с баном в конце;
- брать данные из внутренних JSON-ответов, которые страница запрашивает сама: там уже структура, разбирать вёрстку не нужно;
- не гнать десять параллельных потоков с одного адреса.
И перед всем этим стоит проверить официальный путь: открытый API, партнёрская выгрузка, фид, карта сайта. Если он есть, он дешевле и стабильнее любого обхода. Чего мы не делаем: не обходим авторизацию, не собираем персональные данные и не создаём нагрузку, от которой чужому сайту плохо.
Сбор ломается на третьей неделе, а не в первый день
Одноразовый скрипт и постоянный сбор — разные задачи. Через неделю-другую меняется вёрстка, обновляется антибот, появляется капча там, где её не было. Скрипт при этом не падает с ошибкой — он возвращает пустоту или мусор, и это замечают, когда по данным уже приняли решение.
Поэтому мы ставим сбор на свой сервер по расписанию и добавляем проверки:
- правдоподобность результата: резкое падение числа собранных позиций — это, скорее всего, блокировка, а не исчезнувший ассортимент;
- повтор с задержкой и сменой сессии вместо немедленного долбления;
- уведомление в телеграм, когда сбор не прошёл, — раньше, чем это увидит заказчик отчёта;
- сохранение сырого ответа, чтобы разобрать данные заново, не перезапуская сбор.
Второе, что даёт постоянный сбор, — история. Одна выгрузка отвечает на вопрос «сколько стоит сейчас», история отвечает на вопрос «кто, когда и на сколько двигал цену». У нас накоплено около 3,8 ГБ истории цен, и именно она делает мониторинг конкурентов полезным, а не просто снимком дня.
Данные должны попадать туда, где с ними работают
Выгрузка, которую надо открыть руками, обычно не открывается. Собранное имеет смысл сразу класть туда, где идёт работа: таблица, 1С, CRM, витрина на сайте, бот с уведомлением при изменении цены или появлении позиции.
- регулярные выгрузки в таблицы и интеграции по API или вебхуку;
- сопоставление своей номенклатуры с чужой — самая трудоёмкая часть, названия у всех разные;
- уведомления по правилам: не «пришли все цены», а «конкурент опустился ниже нас по этим артикулам»;
- работа по расписанию на сервере без присмотра, с журналом и сторожем.
Техническая часть обхода защиты — меньшая половина задачи. Большая — сделать так, чтобы данные приходили каждый день, в одном формате и в нужное место.
Соберём под ваш случай и покажем на ваших данных.
Сбор данных →