Скрапинг на 360°: полный обзор автоматизированного сбора данных
Привет! Я Арсений Савин — Backend-инженер и архитектор решений из Effective. Обожаю погружаться в технологии и всё, что с ними связано: от DevOps и AppSec до кроссплатформенной разработки клиентских приложений. Сейчас я занимаюсь проблемой скрапинга: изучаю его возможности и способы защиты от него.
Веб-скрапинг — это процесс автоматизированного получения данных с веб-ресурсов. Зачастую данные извлекаются из источников, которые изначально не предполагали открытого доступа к полученной информации.
За полтора года я изучил работу множества разнообразных систем защиты от скрапинга, о которых и расскажу в этой статье.
Для чего нужен скрапинг?
Я уже сказал, что мы занимаемся только сбором материалов клиентов, но на практике скрапинг применяется во множестве сценариев — от агрегации контента и автоматизации бизнес-процессов, для которых нет готовых API, до сбора данных для машинного обучения и исследованиях рынка.
Одна из самых востребованных сфер применения — крупный ритейл. Аналитик, работающий с ассортиментом и ценами конкурентов, может ежедневно вручную собирать информацию с маркетплейсов. Такой процесс утомителен, занимает много времени и повышает вероятность ошибок. Автоматизация через веб-скрапинг решает эти проблемы, снимая нагрузку с человека.
Однако такие данные являются чувствительной информации, поэтому многие сайты препятствую скрапингу. Например, Google уже блокирует ботов OpenAI, чтобы те не использовали их страницы для парсинга.
Как стать скрапером?
Простейший способ начать скрапинг — открыть сайт, включить инструменты разработчика, найти HTTP-запросы, которые подгружают нужные данные, и воспроизвести их с помощью скрипта.
Но на практике быстро возникает проблема: запросы, сделанные из браузера, проходят, а те же запросы, отправленные напрямую через cURL или Python, возвращают ошибку 403 Forbidden.
WAF — это реверс-прокси, который анализирует HTTP-запросы и поведение пользователя. По ним он определяет, человек ли перед ним или бот. Алгоритм WAF часто использует скоринговую метрику, где:
- 0 — подозрительный = бот;
- 1 — доверенный = человек.
Факторы оценки: структура запроса, заголовки, последовательность действий, движения мыши, скорость кликов.
Помимо этого, сайты используют и специализированные механизмы защиты от скрапинга. Рассмотрим их отдельно.
Препятствия для скрапинга
При запросе страницы мы можем получить либо структурированные данные, которые легко парсить (JSON, XML, YAML), либо HTML-контент, требующий дополнительной обработки.
Для парсинга HTML часто используют библиотеки вроде BeautifulSoup, которые разбирают DOM-дерево на лексемы и позволяют искать нужные элементы по селекторам.
Однако сайты могут усложнять задачу — например, менять ID элементов на странице каждый день, что требует постоянной адаптации скриптов.
Проблема динамического контента: когда HTML пустой
Современные сайты часто загружают контент динамически — через JavaScript. Код страницы может делать дополнительные запросы, устанавливать токены и куки, проверять состояние сессии.
Чтобы корректно воспроизвести такую работу, приходится использовать инструменты автоматизации браузера — Playwright, Selenium, Puppeteer. Они управляют браузером через протоколы вроде Chrome DevTools Protocol (CDP), выполняя весь процесс рендеринга как при обычном просмотре.
Ограничения по частоте запросов и прокси
Сайты ограничивают частоту запросов (rate limiting), чтобы блокировать агрессивных ботов. Ограничения могут быть привязаны к IP-адресу, User-Agent, cookies или комбинации этих параметров.
Для обхода таких блокировок используют прокси-серверы:
- Datacenter — самые дешёвые, но легко определяемые.
- Residential — используют IP-адреса домашних пользователей, сложнее детектируются.
- Mobile — используют IP-адреса мобильных операторов. Наиболее незаметные, но дорогие.
Правильная ротация IP, согласовывание заголовков с поведением реального пользователя и отсутствие массового выхода «пользователей» из одного IP критически важны для долгосрочной работы скраперов.
Капча
CAPTCHA — один из самых распространённых способов защиты. Она просит пользователя выполнить действия, трудные для ботов: выбрать картинки, собрать пазл, перевернуть фигуру.
Существуют сервисы Captcha Solver, которые решают капчу за вас:
- Человеческие солверы — более устойчивы к новым видам капчи, но медленнее и дороже.
- Автоматические (AI) солверы — быстрее и дешевле, но требуют дообучения при появлении новых форматов капчи.
Эффективнее всего использовать специализированные сервисы, учитывая задержки и возможный даунтайм.
Фингерпринтинг: новый уровень защиты
Современные системы защиты, например Google reCAPTCHA v3, часто используют браузерный фингерпринтинг.
Фингерпринтинг — это сбор уникальных характеристик браузера и устройства:
- User-Agent
- Шрифты
- Рендеринг Canvas
- Поведение мыши и клавиатуры
- Скорость кликов и переходов
На основе этих данных строится вероятностная модель, определяющая, человек ли вы. Несогласованные комбинации параметров (например, macOS с Chromium, которого там быть не должно) быстро приводят к блокировке.
Для обхода таких систем нужны инструменты, которые генерируют согласованные отпечатки браузера.
Инструменты для обхода фингерпринтинга
Для маскировки бота под пользователя нужны согласованные отпечатки:
- BrowserForge — библиотека для генерации валидных фингерпринтов на основе вероятностных графов.
- Camoufox — модифицированная версия Firefox, в которую встроена генерация отпечатков и эмуляция поведения человека (движения мыши, задержки кликов).
Принцип генерации элементов для эмуляции фингерпринтинга иллюстрирует байесовская генеративная сеть:
Элементы, которые помогает имитировать байесовская сеть:
На основе этих данных строится модель, оценивающая «человечность» пользователя. Несогласованные параметры (например, macOS + Chromium, которого на macOS нет) быстро ведут к бану.
Стратегия построения скрапера
Для быстрых MVP-проектов или одноразовых задач:
- Camoufox
- Резидентские прокси
- Captcha Solver (по необходимости)
Для долгосрочных и масштабных проектов потребуется комплексный подход:
- контроль согласованности фингерпринтов,
- IP-ротация,
- эмуляция поведения пользователя,
- регулярная адаптация к динамическим изменениям сайта.
Когда скрапинг экономически оправдан
Веб-скрапинг имеет смысл, когда:
- Задача выполняется часто и в больших объёмах.
- Нет доступа к официальному API.
- Требуются данные, которые недоступны публично.
- Требуется автоматизация объёмных процессов.
Если же задача выполняется редко, скрапер может не окупиться из-за затрат на разработку и поддержку.
Вывод
Скрапинг — это постоянная гонка между разработчиками ботов и системами защиты. Любая защита может быть обойдена, вопрос лишь во времени, ресурсах и ценности данных.
Идеального решения, которое будет работать всегда, не существует: защита развивается, появляются новые методы блокировки, а скраперы находят новые обходы. Лучшие результаты даёт комбинация нескольких методов, адаптированных под конкретный сайт.