Скрапинг на 360°: полный обзор автоматизированного сбора данных

Привет! Я Арсений Савин — Backend-инженер и архитектор решений из Effective. Обожаю погружаться в технологии и всё, что с ними связано: от DevOps и AppSec до кроссплатформенной разработки клиентских приложений. Сейчас я занимаюсь проблемой скрапинга: изучаю его возможности и способы защиты от него.

Веб-скрапинг — это процесс автоматизированного получения данных с веб-ресурсов. Зачастую данные извлекаются из источников, которые изначально не предполагали открытого доступа к полученной информации.

За полтора года я изучил работу множества разнообразных систем защиты от скрапинга, о которых и расскажу в этой статье.

Для чего нужен скрапинг?

Я уже сказал, что мы занимаемся только сбором материалов клиентов, но на практике скрапинг применяется во множестве сценариев — от агрегации контента и автоматизации бизнес-процессов, для которых нет готовых API, до сбора данных для машинного обучения и исследованиях рынка.

Одна из самых востребованных сфер применения — крупный ритейл. Аналитик, работающий с ассортиментом и ценами конкурентов, может ежедневно вручную собирать информацию с маркетплейсов. Такой процесс утомителен, занимает много времени и повышает вероятность ошибок. Автоматизация через веб-скрапинг решает эти проблемы, снимая нагрузку с человека.

Однако такие данные являются чувствительной информации, поэтому многие сайты препятствую скрапингу. Например, Google уже блокирует ботов OpenAI, чтобы те не использовали их страницы для парсинга.

Как стать скрапером?

Простейший способ начать скрапинг — открыть сайт, включить инструменты разработчика, найти HTTP-запросы, которые подгружают нужные данные, и воспроизвести их с помощью скрипта.

GET /api/products HTTP/1.1 Host: example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Accept: application/json HTTP/1.1 403 Forbidden Server: cloudflare CF-RAY: 82a65c5adb167e34

Но на практике быстро возникает проблема: запросы, сделанные из браузера, проходят, а те же запросы, отправленные напрямую через cURL или Python, возвращают ошибку 403 Forbidden.

Скрапинг на 360°: полный обзор автоматизированного сбора данных

WAF — это реверс-прокси, который анализирует HTTP-запросы и поведение пользователя. По ним он определяет, человек ли перед ним или бот. Алгоритм WAF часто использует скоринговую метрику, где:

  • 0 — подозрительный = бот;
  • 1 — доверенный = человек.

Факторы оценки: структура запроса, заголовки, последовательность действий, движения мыши, скорость кликов.

Помимо этого, сайты используют и специализированные механизмы защиты от скрапинга. Рассмотрим их отдельно.

Препятствия для скрапинга

При запросе страницы мы можем получить либо структурированные данные, которые легко парсить (JSON, XML, YAML), либо HTML-контент, требующий дополнительной обработки.

Скрапинг на 360°: полный обзор автоматизированного сбора данных

Для парсинга HTML часто используют библиотеки вроде BeautifulSoup, которые разбирают DOM-дерево на лексемы и позволяют искать нужные элементы по селекторам.

Однако сайты могут усложнять задачу — например, менять ID элементов на странице каждый день, что требует постоянной адаптации скриптов.

Проблема динамического контента: когда HTML пустой

Современные сайты часто загружают контент динамически — через JavaScript. Код страницы может делать дополнительные запросы, устанавливать токены и куки, проверять состояние сессии.

Скрапинг на 360°: полный обзор автоматизированного сбора данных

Чтобы корректно воспроизвести такую работу, приходится использовать инструменты автоматизации браузера — Playwright, Selenium, Puppeteer. Они управляют браузером через протоколы вроде Chrome DevTools Protocol (CDP), выполняя весь процесс рендеринга как при обычном просмотре.

from playwright. sync_api import sync_playwright with sync_playwright() as p: browser = p.chromium.launch() page = browser.new_page() page.goto("https://example.com/products") products = page.query_selector_all|" product-card") print([fp.query_selector(" title"). text_content()} for p in products])

Ограничения по частоте запросов и прокси

Сайты ограничивают частоту запросов (rate limiting), чтобы блокировать агрессивных ботов. Ограничения могут быть привязаны к IP-адресу, User-Agent, cookies или комбинации этих параметров.

Скрапинг на 360°: полный обзор автоматизированного сбора данных

Для обхода таких блокировок используют прокси-серверы:

  • Datacenter — самые дешёвые, но легко определяемые.
Скрапинг на 360°: полный обзор автоматизированного сбора данных
  • Residential — используют IP-адреса домашних пользователей, сложнее детектируются.
Скрапинг на 360°: полный обзор автоматизированного сбора данных
  • Mobile — используют IP-адреса мобильных операторов. Наиболее незаметные, но дорогие.
Скрапинг на 360°: полный обзор автоматизированного сбора данных

Правильная ротация IP, согласовывание заголовков с поведением реального пользователя и отсутствие массового выхода «пользователей» из одного IP критически важны для долгосрочной работы скраперов.

import random user_agents = l "Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/97.0.4692.71", "Mozilla/5.0 (Macintosh; Intel Mac OS X 12_1) Safari/605.1.15", "Mozilla/5.0 (iPhone; CPU iPhone 05 15_2 like Mac OS X) Mobile/15E148" headers = { "User-Agent": random. choice(user_agents), "Accept-Language": "en-US, en; q=0.9" "Referer": "https://www.google.com/" "Accept": "text/html, application/xhtml+xml,application/xml;q=0.9" } # Use with requests: requests.get(url, headers=headers)

Капча

CAPTCHA — один из самых распространённых способов защиты. Она просит пользователя выполнить действия, трудные для ботов: выбрать картинки, собрать пазл, перевернуть фигуру.

Скрапинг на 360°: полный обзор автоматизированного сбора данных

Существуют сервисы Captcha Solver, которые решают капчу за вас:

  • Человеческие солверы — более устойчивы к новым видам капчи, но медленнее и дороже.
  • Автоматические (AI) солверы — быстрее и дешевле, но требуют дообучения при появлении новых форматов капчи.
Скрапинг на 360°: полный обзор автоматизированного сбора данных

Эффективнее всего использовать специализированные сервисы, учитывая задержки и возможный даунтайм.

Фингерпринтинг: новый уровень защиты

Современные системы защиты, например Google reCAPTCHA v3, часто используют браузерный фингерпринтинг.

Фингерпринтинг — это сбор уникальных характеристик браузера и устройства:

  • User-Agent
# Простая генерация HTTP-заголовков from browserforge.headers import HeaderGenerator headers = HeaderGenerator() generate() # Пример с requests import requests session = requests.Session() session.headers = headers # Генерация полного отпечатка from browserforge.fingerprints import FingerprintGenerator fingerprint, headers = FingerprintGenerator() generate()
  • Шрифты
  • Рендеринг Canvas
// Пример Canvas Fingerprinting const canvas = document.createElement('canvas'); const ct = canvas.getContext('2d'); canvas.width = 200; canvas.height = 200; ctx.textBaseline = "top"; ctx.font = "14px 'Arial"; ctx.textBaseline = "alphabetic"; ctx.fillStyle = "#f60"; ctx.fillRect(125, 1, 62, 20); ctx.fillStyle = "#069"; ctx.fillText("Hello, world!", 2, 15); const dataURL = canvas.toDataURL(); return dataURL; // Уникальный для устройства
  • Поведение мыши и клавиатуры
# Sync API from camoufox import Camoufox with Camoufox) as browser: page = browser.new_page() page.goto("https://example.com") content = page.content() # Async API from camoufox import AsyncCamoufox import asyncio async def main(): async with AsyncCamoufox() as browser: page = await browser.new_page() await page.goto("https://example.com")
  • Скорость кликов и переходов

На основе этих данных строится вероятностная модель, определяющая, человек ли вы. Несогласованные комбинации параметров (например, macOS с Chromium, которого там быть не должно) быстро приводят к блокировке.

Скрапинг на 360°: полный обзор автоматизированного сбора данных

Для обхода таких систем нужны инструменты, которые генерируют согласованные отпечатки браузера.

Инструменты для обхода фингерпринтинга

Для маскировки бота под пользователя нужны согласованные отпечатки:

  • BrowserForge — библиотека для генерации валидных фингерпринтов на основе вероятностных графов.
  • Camoufox — модифицированная версия Firefox, в которую встроена генерация отпечатков и эмуляция поведения человека (движения мыши, задержки кликов).

Принцип генерации элементов для эмуляции фингерпринтинга иллюстрирует байесовская генеративная сеть:

Скрапинг на 360°: полный обзор автоматизированного сбора данных

Элементы, которые помогает имитировать байесовская сеть:

Скрапинг на 360°: полный обзор автоматизированного сбора данных

На основе этих данных строится модель, оценивающая «человечность» пользователя. Несогласованные параметры (например, macOS + Chromium, которого на macOS нет) быстро ведут к бану.

Стратегия построения скрапера

Для быстрых MVP-проектов или одноразовых задач:

  • Camoufox
  • Резидентские прокси
  • Captcha Solver (по необходимости)

Для долгосрочных и масштабных проектов потребуется комплексный подход:

  • контроль согласованности фингерпринтов,
  • IP-ротация,
  • эмуляция поведения пользователя,
  • регулярная адаптация к динамическим изменениям сайта.
Скрапинг на 360°: полный обзор автоматизированного сбора данных

Когда скрапинг экономически оправдан

Веб-скрапинг имеет смысл, когда:

  • Задача выполняется часто и в больших объёмах.
  • Нет доступа к официальному API.
  • Требуются данные, которые недоступны публично.
  • Требуется автоматизация объёмных процессов.

Если же задача выполняется редко, скрапер может не окупиться из-за затрат на разработку и поддержку.

Вывод

Скрапинг — это постоянная гонка между разработчиками ботов и системами защиты. Любая защита может быть обойдена, вопрос лишь во времени, ресурсах и ценности данных.

Идеального решения, которое будет работать всегда, не существует: защита развивается, появляются новые методы блокировки, а скраперы находят новые обходы. Лучшие результаты даёт комбинация нескольких методов, адаптированных под конкретный сайт.

2
Начать дискуссию