web_fetch 的“裸奔”困境: 它是 Claude 的原生工具,主打一个“零配置”。但在 OpenClaw 里实测发现,它返回的是未经处理的原始 HTML。对于简单的 GitHub README 还行,一旦遇到稍微复杂点的页面,有效正文被淹没在噪音里,Token 浪费极其严重。更致命的是,面对 Substack 或微信公众号这种带反爬机制的站点,它基本是直接歇菜,返回空值或报错。 Jina 的“限额”焦虑: Jina Reader (r.jina.ai) 确实是神器,一行 URL 前缀就能吐出极度干净的 Markdown,格式完美,几乎不需要二次清洗。但是,它的免费额度卡在 200 次/天。对于个人偶尔查查资料够用,但如果你是个高产的创作者,或者需要批量处理数据,这个限额就像悬在头顶的达摩克利斯之剑,一不小心就耗尽,工作流直接中断。 Scrapling的门槛与维护:像 Scrapling 这种偏工程化的抓取工具,能力更全面,适配面也更广。不过它对接入方式、运行环境、维护习惯会更挑一点:你要么写脚本,要么封装技能,要么做容错策略。
出身:Jina AI 官方维护,GitHub 9.7k+ Star,Apache-2.0 开源。 必杀技:无需注册,无需 API Key。只要在 URL 前加 https://r.jina.ai/,它就能把任意网页(包括 SPA 动态渲染页、PDF)转为 LLM 友好的 Markdown。 额外能力:支持 s.jina.ai 搜索并返回 Top 5 全文;自动给图片加 Alt 描述。 定位:格式最干净的“预处理工厂”。

出身:GitHub 上近期爆火的自适应爬虫框架,Star 数已突破 2.2 万(截至 2026 年 3 月数据),BSD-3-Clause 开源。原作者已明确宣布正在将其打造为 OpenClaw 的原生 Skill。 必杀技:拥有三种 Fetcher 模式。轻量 HTTP 模式速度快;StealthyFetcher 能绕过 Cloudflare 等常见反爬;DynamicFetcher 则是完整的浏览器自动化,专治各种 JS 渲染。 独门绝技:网站改版后,它能自动重新定位目标元素,不用你天天修 XPath。它还内置了 MCP Server,能直接跟 Claude/Cursor 对话。 定位:能扛能打、无限免费的“特种部队”。
出身:Claude 原生内置工具。 必杀技:零配置,OpenClaw 工作流里拖个节点就能用。 定位:适合简单静态页面的“快速侦察兵”。
三者都能完成。但 web_fetch 返回的内容里夹杂了大量 <script> 和 CSS 类名,导致后续 LLM 处理时 Token 消耗多了近 3 倍。Jina 和 Scrapling 输出的 Markdown 几乎一致,干净利落。
Jina:表现最佳,秒开,格式完美。是第一优先选择。 web_fetch:直接报错 Connection timeout 或返回 403,完全不可用。 Scrapling:使用 StealthyFetcher 模式,耗时约 3 秒,成功绕过验证,内容完整。虽然慢了点,但能抓到就是胜利。
Scrapling (DynamicFetcher):提供完整的浏览器控制,等待 JS 执行完毕后再提取,效果最强。 Jina:依赖后端的 Puppeteer 集群,表现稳定,但偶尔会遇到超时。 web_fetch:局限性明显,经常只能抓到 Loading 状态的骨架屏。
# OpenClaw 中的 Python 脚本节点示例
from scrapling import StealthyFetcher
import html2text
def fetch_wechat(url):
# 启动 stealthy 模式,自动处理 Cookie 和指纹
fetcher = StealthyFetcher(auto_match=True)
page = fetcher.fetch(url)
# 转换为 Markdown
h = html2text.HTML2Text()
h.ignore_links = False
markdown_content = h.handle(page.text)
return markdown_content
# 实测 mp.weixin.qq.com/s/xxx 链接,返回正常---
name: scrapling-web-scraper
description: 自适应网页抓取框架,支持反爬虫绕过、动态页面处理和智能元素追踪
version: 1.0.0
compatibility: openclaw
requires:
bins: [python, pip]
env: [SCRAPLING_API_KEY]
---
# 使用说明
本技能允许你使用 Scrapling 的强大功能抓取网页。
## 可用指令
- **隐身模式**: 当遇到 Cloudflare 或其他反爬机制时,自动启用 StealthyFetcher。
- **动态渲染**: 对于 SPA 页面,自动切换 DynamicFetcher 等待 JS 执行。
- **智能追踪**: 即使网站改版,也能自动重新定位目标元素。
## 示例
"用 Scrapling 抓取 https://example.com 的产品列表,提取名称、价格和评分"scrapling_skill.py:封装好的 Python 逻辑,处理所有复杂的底层调用。 config.json:预设的配置参数,如默认超时时间、重试次数等。 handlers/:针对不同场景(如电商、新闻、社交媒体)的专用处理模块。
# 1. 克隆 Scrapling 仓库
git clone https://github.com/D4Vinci/Scrapling.git
# 2. 将 agent-skill 目录复制到 OpenClaw 技能目录
# 全局安装(所有项目可用)
cp -r Scrapling/agent-skill ~/.openclaw/skills/scrapling-skill
# 或者项目级安装(推荐,便于版本管理)
cp -r Scrapling/agent-skill ./skills/scrapling-skill# 搜索技能
openclaw search "scrapling"
# 安装技能
openclaw install scrapling-web-scraper
# 如果需要,配置相关密钥
openclaw configure scrapling-web-scraper# 安装工具
npm install -g add-skill
# 直接添加
npx add-skill https://github.com/D4Vinci/Scrapling/tree/main/agent-skill{
"skills": {
"scrapling-web-scraper": {
"enabled": true,
"path": "~/.openclaw/skills/scrapling-skill",
"config": {
"stealth_mode": true,
"solve_cloudflare": true,
"proxy_rotation": "auto"
}
}
}
}export SCRAPLING_API_KEY="your_api_key_here"
export SCRAPLING_PROXY_POOL="http://proxy1:port,http://proxy2:port"
# 重启 OpenClaw
openclaw restart基础抓取:
“用 Scrapling 技能抓取 https://example.com 的产品列表,提取名称、价格和评分。”
高阶反爬:
“使用 Scrapling 的隐身模式绕过 Cloudflare,抓取这个需要登录的网站数据。”
智能监控:
“用自适应解析功能监控这个网站,如果页面结构变化自动重新定位元素。”
定时任务:
“设置定时任务,每天上午 9 点抓取竞争对手价格并生成报告。”
组合拳:
“先用 Scrapling 抓取数据,然后用数据分析技能生成可视化图表,最后用邮件技能发送报告。”
Scrapling 功能 | OpenClaw 调用方式 | 示例指令 |
|---|---|---|
StealthyFetcher | 隐身模式抓取 | “用隐身模式抓取受保护的网站” |
DynamicFetcher | 动态页面处理 | “抓取需要 JavaScript 渲染的页面” |
自适应解析 | 智能元素追踪 | “监控这个页面,元素移动时自动调整” |
Spider 框架 | 批量爬虫任务 | “抓取这个网站的所有产品页面” |
MCP 服务器 | AI 辅助抓取 | “帮我分析这个页面的最佳抓取策略” |
技能未加载:运行 openclaw skills list 检查,若未显示则运行 openclaw skills reload。 403 错误:在指令中显式要求 –stealth-mode true 或配置 –proxy-rotation auto。 动态页抓取失败:指定 –fetcher-type dynamic 并启用 –network-idle true。
Token 优化:指令中明确范围,如“只抓取 .price-table 类内的数据”,减少无效信息传输。 容错处理:设定备用策略,“如果抓取失败,尝试备用 URL 或使用移动端页面”。 合规第一:始终提醒 AI“检查 robots.txt,遵守网站抓取规则”。
在 OpenClaw 的工作流开头加一个判断节点:检测到 URL 包含 mp.weixin.qq.com → 直接调用 Scrapling Skill,跳过 Jina。这样既避免了 Jina 的无效尝试(反正它也抓不到),又节省了宝贵的每日配额给其他英文站点。
在 OpenClaw 工作流中添加一个 HTTP Request 节点。 Method 选择 GET。 URL 填写模板:https://r.jina.ai/{{input_url}}。 无需任何 Header,直接发送。 输出即为清洗后的 Markdown。
按照第六节的方法安装 scrapling-web-scraper 技能。 在 OpenClaw 的聊天窗口或工作流的“AI 指令”节点中,直接输入:
“请使用 scrapling-web-scraper 技能,访问 {{input_url}},提取正文内容并转换为 Markdown。如果是微信公众号链接,请自动开启隐身模式。”
OpenClaw 会自动加载技能包中的 SKILL.md 上下文,调用底层的 Python 脚本执行任务,并返回结果。
确保环境已安装依赖:pip install scrapling html2text。 添加一个 Python Script 节点,代码如下:
import scrapling
import html2text
# 获取输入变量
url = params.get('url')
# 智能判断:如果是微信,强制使用 StealthyFetcher
if'weixin.qq.com'in url:
fetcher = scrapling.StealthyFetcher(auto_match=True)
else:
# 普通站点用轻量模式,速度更快
fetcher = scrapling.Fetcher()
try:
page = fetcher.fetch(url)
# 初始化 html2text
h = html2text.HTML2Text()
h.ignore_links = False
h.body_width = 0# 不换行,保持段落完整
markdown_text = h.handle(page.text)
# 截断保护
if len(markdown_text) > 30000:
markdown_text = markdown_text[:30000] + "nn... (内容过长已截断)"
result = markdown_text
except Exception as e:
result = f"Error: {str(e)}"
# 输出结果
{'content': result}Jina 是锋利的匕首,快准狠,但有耐久度限制; Scrapling 是厚重的盾牌,能抗能打。特别是它现在拥有了原生的 Agent-Skill 形态,让中文语境下的微信公众号抓取变得像说话一样简单,这让它成为了无可替代的必选项; web_fetch 则是随手的螺丝刀,简单场景顺手用一下。