scraper 第一次运行正常。第三次开始出现 403、空 response 或 CAPTCHA 循环。代码没变,站点也没变。变化的是 anti-bot 系统已经建立了你的 session profile,并开始拦截。
TL;DR: 大多数封锁来自四层: network、browser identity、behavior 和 session state。先使用能在 engine 层管理 fingerprints 和 proxy routing 的 anti-detect browser,再让代码专注于侦察、提取、pagination 和扩展。
四层模型的完整说明见 不被封锁的浏览器自动化: 四层防御栈.
写代码前先侦察
直接写 scraper 很容易返工。花 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 站点需要带 managed fingerprints 的真实 browser。
检查是否有 API
使用 browser 之前,先在 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 更快,但受保护站点可能要求 API call 来自真实 browser session。此时应加载页面并 intercept response。
判断渲染模型
关闭 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
工具取决于保护强度和渲染方式。HTTP 足够时用完整 browser 会浪费资源;受保护 SPA 只用 HTTP 会浪费时间。
决策树
无 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 levelClawbrowser 是本地、免费、基于 Chromium 的 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 (滚动加载内容):
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处理动态内容
部分数据只会在 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;scraping 的 session 管理
scraper 会访问远多于真人的页面。session 必须长期保持一致。
Session warming
不要直接访问目标页。先 home、category、cookie banner,再 scrape。behavior 层见 不被封锁的浏览器自动化: 四层防御栈.
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。每个 profile 都有自己的 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 页后被封 | behavior detection 或 session limits | 降速、加 delay、warm session |
| 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 | 在 production 加 residential proxy |
| 空页面 / 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 |
快速诊断脚本
import asyncio
from playwright.async_api import async_playwright
async def diagnose_blocking(target_url):
async with async_playwright() as p:Scrape Cloudflare 保护的站点
Cloudflare 同时评估 TLS、JavaScript、behavior 和 IP reputation。
Cloudflare 检查什么
- TLS fingerprint (JA3/JA4): ClientHello 不一致会在 HTML 前触发 challenge。
- JavaScript execution: Turnstile 需要真实渲染环境。
- IP reputation: IP reputation 在大量站点上累计评估。
- Request patterns: 同一 session 的重复 request pattern 会被标记。
Workflow
所有层必须同时干净: TLS/JS 用 anti-detect browser,IP 用 residential proxy,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 阻止.
AI agent scraping
Clawbrowser 的 MCP server 让 AI agent 通过 CDP 控制真实 browser sessions,并使用同样的 fingerprints 和 proxy routing。
完整集成指南见 面向 AI Agent 的 CDP Browser: 开发者指南.
FAQ
为什么 scraper 本地能跑,production 失败?
本地通常是 residential IP,production 多是 datacenter IP。添加 residential proxy,并检查 managed fingerprints。
应该用 HTTP client 还是 browser?
server-rendered HTML 且无 anti-bot 时用 HTTP。JavaScript rendering 或 challenge 时用完整 browser。
如何判断站点是否使用 Cloudflare?
在 DevTools response headers 中查找 cf-ray 或 server: cloudflare。
不使用 proxies 可以 scrape 吗?
未保护站点可以。Cloudflare/Akamai 后面或规模化任务通常需要 residential proxies。
开始不被检测的 Web Scraping
可靠 scraping 从侦察、正确工具和干净的 browser infrastructure 开始。
Install Clawbrowser 来处理 browser identity 和 network 层: 从 clawbrowser.ai 复制安装 prompt,粘贴到 AI agent。setup 不到两分钟。
detection model 见 不被封锁的浏览器自动化: 四层防御栈. fingerprinting 细节见 Browser Fingerprinting: Anti-Bot 系统使用的 20+ 个信号.
Continue exploring
Ask AI how Clawbrowser helps
继续阅读


