Веб-скрейпинг без обнаружения: обложка статьи Clawbrowser

Веб-скрейпинг без обнаружения: техники, которые работают

Clawbrowser Teamweb-scrapinganti-botfingerprintingproxyгайд

Скрейпер работает на первом запуске. На третьем появляются 403, пустые ответы или бесконечная CAPTCHA. Код не менялся. Сайт тоже. Anti-bot система собрала профиль сессии и начала блокировать.

TL;DR: большинство блокировок возникает в четырех слоях: сеть, browser identity, поведение и session state. Начинайте с anti-detect browser, который управляет fingerprints и proxy routing на уровне engine; код оставьте для recon, extraction, pagination и масштаба.

Полная модель четырех слоев разобрана здесь: Автоматизация браузера без блокировок: 4 слоя защиты.


Recon до кода

Если сразу писать скрейпер, его часто приходится переписывать. 10 минут разведки помогают выбрать правильный stack.

Определите anti-bot систему

Откройте DevTools на целевом сайте и проверьте response headers.

Header Anti-bot система
cf-ray, server: cloudflare Cloudflare Bot Management
x-akamai-transformed Akamai Bot Manager
x-datadome DataDome
x-px-* headers PerimeterX (now HUMAN)
Ничего из списка Скорее всего, нет коммерческого anti-bot или стоит кастомное решение

Простой сайт берется через curl_cffi; сайт с Cloudflare требует реальный browser с managed fingerprints.

Проверьте, есть ли API

Перед browser scraper откройте Network и фильтр XHR/Fetch. Многие сайты грузят данные из JSON endpoint.

# If the site loads product data from an API endpoint
from curl_cffi import requests

response = requests.get(
    "https://target-site.com/api/v2/products?category=electronics&page=1",

Endpoint быстрее, но защищенный сервер может ждать реальную browser session перед API call. Надежнее загрузить страницу и перехватить response.

Оцените rendering model

Отключите JavaScript. Если контент виден, хватит HTTP. Если страница пустая, нужен browser engine.

Контент виден без JS? Инструмент
Да, все рендерится curl_cffi or requests with TLS impersonation
Частично curl_cffi for static parts, browser for dynamic
Нет, пустая страница Full browser (Clawbrowser + Playwright/Puppeteer)

Выбор scraping stack

Инструмент зависит от защиты и rendering. Полный browser тратит ресурсы, когда хватает HTTP; HTTP бесполезен на защищенной SPA.

Дерево решений

Нет anti-bot + server-rendered HTML: используйте curl_cffi с TLS impersonation.

from curl_cffi import requests

response = requests.get(
    "https://unprotected-site.com/products",
    impersonate="chrome136"

Нет anti-bot + JavaScript-rendered: используйте обычный headless browser.

Anti-bot + server-rendered HTML: используйте curl_cffi с residential proxy.

Anti-bot + JavaScript-rendered: используйте Clawbrowser с managed fingerprints и residential proxy.

from playwright.async_api import async_playwright

async def scrape_protected_site():
    async with async_playwright() as p:
        # Clawbrowser handles fingerprints, TLS and proxy at the engine level

Clawbrowser — локальный бесплатный Chromium-based anti-detect browser с managed fingerprints, proxy routing, native CDP и встроенным MCP server.


Паттерны извлечения данных

После anti-bot слоя начинается обычная работа скрейпера: стабильно доставать структурированные данные.

Pagination

Чаще всего встречаются три паттерна pagination.

URL-based pagination

async def scrape_paginated(page, base_url, max_pages=50):
    all_items = []
    for page_num in range(1, max_pages + 1):
        await page.goto(f"{base_url}?page={page_num}")
        await human_delay(2000, 4000)

Infinite scroll (контент грузится при scroll):

async def scrape_infinite_scroll(page, max_scrolls=30):
    all_items = []
    previous_count = 0

    for _ in range(max_scrolls):

"Load more" button:

async def scrape_load_more(page):
    while True:
        load_more = await page.query_selector('[data-testid="load-more"]')
        if not load_more:
            break

Dynamic content

Часть данных появляется только после click, accordion или hover.

async def extract_product_details(page, product_url):
    await page.goto(product_url)
    await human_delay(1000, 2000)

    # Click "Specifications" tab to reveal hidden data

Извлечение из shadow DOM

Компоненты в shadow DOM нужно читать через shadow root.

# Pierce through shadow DOM to extract data
data = await page.evaluate("""
    () => {
        const host = document.querySelector('product-card');
        const shadow = host.shadowRoot;

Session management для scraping

Скрейпер ходит по сотням страниц. Без аккуратной session он быстро выглядит не как человек.

Session warming

Не идите сразу на target page: home, category, cookies, затем scraping. Поведенческий слой описан в Автоматизация браузера без блокировок: 4 слоя защиты.

async def warm_session(page, site_url):
    await page.goto(site_url)
    await human_delay(2000, 4000)

    # Accept cookies if banner appears

Ротация profiles на масштабе

Разносите объем по нескольким Clawbrowser profiles: у каждого свой fingerprint, cookies, storage и proxy.

import asyncio
from playwright.async_api import async_playwright

async def scrape_batch(profile_name, urls):
    async with async_playwright() as p:
Масштаб Подход
< 100 pages/day Single profile, residential proxy, 3-5s delays
100-1,000 pages/day 3-5 rotating profiles, sticky residential sessions
1,000-10,000 pages/day 10+ profiles, proxy pool, session warming
10,000+ pages/day Distributed setup, multiple Clawbrowser instances, backoff logic

Диагностика блокировок

Симптом обычно показывает, какой слой сломался.

Симптом Вероятная причина Фикс
Блок на первом request IP reputation или browser fingerprint Перейти на residential proxy и anti-detect browser
Блок после 5-10 страниц Behavioral detection или session limits Замедлиться, добавить delays, прогреть sessions
CAPTCHA on every page Fingerprint leak Browser is leaking automation signals, switch to managed fingerprints
403 after proxy rotation Browser fingerprint unchanged New IP but same broken fingerprint, fix the browser layer
Локально работает, в production падает Datacenter IP Добавить residential proxy в production
Пустая страница / вечный spinner JavaScript challenge failed Browser can't pass Cloudflare/Akamai JS check, needs real engine
Данные отличаются от ручного визита Geo or locale mismatch Proxy location doesn't match fingerprint timezone/language

Быстрый diagnostic script

import asyncio
from playwright.async_api import async_playwright

async def diagnose_blocking(target_url):
    async with async_playwright() as p:

Scraping сайтов под Cloudflare

Cloudflare одновременно смотрит TLS, JavaScript, behavior и IP reputation.

Что проверяет Cloudflare

  1. TLS fingerprint (JA3/JA4): кривой ClientHello получает challenge до HTML.
  2. JavaScript execution: Turnstile требует настоящий rendering environment.
  3. IP reputation: IP reputation считается по миллионам сайтов.
  4. Request patterns: повторяющиеся requests из одной session быстро флагуются.

Workflow

Все слои должны быть чистыми: anti-detect browser для TLS/JS, residential proxy для IP, timing в коде.

async def scrape_cloudflare_site(target_url, profile="cf-scraper"):
    async with async_playwright() as p:
        browser = await p.chromium.connect_over_cdp(
            f"http://127.0.0.1:9222?profile={profile}"
        )

Подробности по Cloudflare: почему ваши Playwright-скрипты блокирует Cloudflare.


Scraping с AI-агентами

MCP server Clawbrowser дает AI-агентам управление реальными browser sessions через CDP, с теми же fingerprints и proxy routing.

Полная интеграция: CDP browser для AI-агентов: гайд для разработчиков.


FAQ

Почему scraper работает локально, но падает в production?

Локально обычно residential IP, production часто datacenter IP. Добавьте residential proxy и проверьте managed fingerprints.

HTTP client или browser?

Для server-rendered HTML без anti-bot хватит HTTP. Для JavaScript rendering или challenges нужен полный browser.

Как понять, что сайт использует Cloudflare?

Ищите cf-ray или server: cloudflare в response headers в DevTools.

Можно ли скрейпить без proxies?

На незащищенных сайтах — да. За Cloudflare/Akamai и на масштабе почти всегда нужны residential proxies.


Начните web scraping без обнаружения

Надежный scraping начинается с recon, правильного инструмента и чистой browser infrastructure.

Install Clawbrowser для browser identity и network layers: скопируйте install prompt с clawbrowser.ai и вставьте его в AI agent. Setup занимает меньше двух минут.

Модель detection: Автоматизация браузера без блокировок: 4 слоя защиты. Детали fingerprinting: Browser fingerprinting: 20+ сигналов, которые используют anti-bot системы.

Continue exploring

Ask AI how Clawbrowser helps

Читайте дальше

Все статьи →