介绍一个 OpenClaw 的好搭档——Scrapling 网页自动化
项目地址:https://github.com/D4Vinci/Scrapling 🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
OpenClaw + Scrapling 组合
大家用 OpenClaw 的一大场景就是网页自动化吧,登录个网页,抓取些信息,或者进行些操作,一般会用到这些工具:
- 简单网页搜索:web search/web fetch 工具配合上搜索服务商 Brave 或者 Tavily 的接口,对于一些不需要登录验证、无反爬保护的网站可以直接获取内容
- 带登录保护的网页:OpenClaw 自带 browser 工具和对应浏览器插件,或者使用 Vercel 的 agent browser CLI + 对应 skill,底层都是基于 Playwright 的,可以实现操控浏览器,可以手动登录好让 Agent 来操作
- 反爬严格的网站:例如接了 Cloudflare 的,就需要 Scrapling 出场了
2025 年,WIRED 和 TechStrong 都报道过 OpenClaw 用户使用 Scrapling 绕过 Cloudflare 的操作。
Scrapling 是什么项目
- 创建时间:2024 年 10 月
- Star 数:30.6 k
- 语言:Python
虽然项目早于 OpenClaw 就存在,但是最近被 OpenClaw 带火了:
| 以前 | 现在 |
|---|---|
| 开发者手动写爬虫脚本 | AI Agent 24/7 自主运行 |
| 需要技术背景 | 自然语言指令即可 |
| 单次爬取 | 持续监控 + 批量爬取 |
Scrapling 提供了 skill 和 MCP Server,让 OpenClaw 可以直接用自然语言调用:
"爬取这个网站的产品列表"
→ OpenClaw 调用 Scrapling skill
→ 自动绕过 Cloudflare
→ 返回结构化 JSON
先简单介绍下反爬机制与绕过原理
常见反爬层级
第一层:HTTP 检测
├── User-Agent
├── Referer
├── Cookie/Session
└── IP 频率限制
第二层:浏览器指纹
├── navigator.webdriver
├── WebGL 指纹
├── Canvas 指纹
└── 字体/屏幕分辨率
第三层:行为分析
├── 鼠标轨迹
├── 点击间隔
└── 滚动行为
第四层:挑战验证
├── CAPTCHA
├── Cloudflare Turnstile
└── JS 计算挑战
Scrapling 绕过方式
1. 真实浏览器引擎
基于 Playwright,使用真实 Chromium:
- 真实 TLS 指纹
- 真实 JS 引擎
- 真实网络栈
2. 隐藏自动化特征
# 自动注入修复:
# - navigator.webdriver = undefined
# - 补充 WebGL 渲染器信息
# - 修复 CDP 检测
# - 模拟正常 plugins
3. 模拟人类行为
- 随机鼠标移动
- 随机滚动
- 随机点击延迟
4. 处理 Turnstile
- 等待 JS 挑战完成
- 会话持久化
- 配置轮换
为什么爬虫没法完全封锁
核心矛盾:
封太严 → 误伤真实用户 → 客户流失
封太松 → 爬虫泛滥 → 客户不满
误伤代价 » 放过爬虫
| 检测手段 | Cloudflare 困境 |
|---|---|
navigator.webdriver |
隐私浏览器用户也有 |
| WebGL 指纹 | 设备差异大,误判率高 |
| 鼠标轨迹 | 残障用户辅助工具异常 |
| IP 限制 | 企业内网共享 IP |
结论:真实环境难以 100% 区分自动化和真人。
Scrapling 核心架构
Scrapling 有三大核心组件:Fetchers(获取网页)、Parser(自适应解析)、Spiders(爬虫框架)。
┌─────────────────────────────────────────────────────┐
│ Scrapling │
├─────────────────┬─────────────────┬─────────────────┤
│ Fetchers │ Parser │ Spiders │
│ (获取网页) │ (自适应解析) │ (爬虫框架) │
├─────────────────┼─────────────────┼─────────────────┤
│ • Fetcher │ • 自适应定位 │ • 并发控制 │
│ • AsyncFetcher │ • 网站改版存活 │ • 暂停/恢复 │
│ • StealthyFetcher│ • auto_save │ • 代理轮换 │
│ • DynamicFetcher│ • adaptive=True │ • 流式输出 │
└─────────────────┴─────────────────┴─────────────────┘
│
┌─────┴─────┐
│ skill │
│ (AI 集成) │
└───────────┘
Fetchers - 获取网页
| Fetcher | 用途 | 底层技术 |
|---|---|---|
Fetcher |
基础 HTTP 请求,快速轻量 | requests/httpx |
AsyncFetcher |
异步高并发 | httpx |
StealthyFetcher |
隐身浏览器,自动绕过反爬 | Playwright + 指纹伪装 |
DynamicFetcher |
JS 渲染页面 | Playwright |
基本用法:
from scrapling.fetchers import StealthyFetcher
page = StealthyFetcher.fetch(
'https://example.com',
headless=True,
solve_cloudflare=True,
network_idle=True,
timeout=30000,
)
# CSS 选择器提取
title = page.css('h1::text').get()
links = page.css('a::attr(href)').getall()
Parser - 自适应解析(核心创新)
Scrapling 的解析器能从网站变化中学习,自动重新定位元素。
原理: 记录元素的多种特征(文本内容、位置、属性、DOM 结构),网站变化时通过相似度匹配重新定位。
# 首次爬取,保存元素特征
products = page.css('.product', auto_save=True)
# 网站改版后,自动找到相同语义的元素
products = page.css('.product', adaptive=True)
特性:
- 网站改版后无需重写选择器
- 自动处理 class 名变化
- 基于语义相似度匹配
Spiders - 爬虫框架
类似 Scrapy 的完整爬虫框架,支持大规模爬取。
from scrapling.spiders import Spider, Response
class MySpider(Spider):
name = "demo"
start_urls = ["https://example.com/"]
# 并发控制
concurrency = 10
download_delay = 1 # 秒
async def parse(self, response: Response):
for item in response.css('.product'):
yield {"title": item.css('h2::text').get()}
# 启动爬虫
MySpider().start()
特性:
- 并发爬取 + 域名限速
- HTTP + 隐身浏览器混合会话
- Ctrl+C 暂停,下次继续
- 流式输出:
async for item in spider.stream() - 自动检测被阻止的请求并重试
- 代理轮换
Skill/MCP Server - AI 集成
让 OpenClaw 等 AI Agent 用自然语言调用爬虫能力。
展望
当前互联网数据访问规则建立在"爬虫可识别"假设上,当 AI Agent 像真人一样浏览,假设被打破。
未来会怎样?可能有三条路:
- 升级反爬系统:持续对抗,投入资源在识别真人与 Agent 的战争中
- 接受现实:承认 Agent 与真人已无法区分,页面 API 化转型服务 Agent
- 法律监管:国家出台法规,要求 Agent 与用户实名认证绑定,企业允许 Agent 有节制访问
参考
- Scrapling GitHub - 30k+ stars
- Scrapling 文档
- TechStrong 报道
- WIRED 报道