OpenClaw 网页爬取指南:使用住宅代理构建 AI 爬虫

AI 代理正在改变人们从网络获取数据的方式。你无需编写脆弱的 CSS 选择器,而只需描述你想要的内容,让代理自行找出获取方法。OpenClaw 就是推动这一转变的框架之一。
本指南将带你从全新安装 OpenClaw 一路走到构建可用于生产环境的抓取器。你将了解 OpenClaw 究竟是什么、它的抓取流程在底层是如何运作的,以及为什么请求底层的代理层与运行在其上的代码同样重要。
到最后,你将拥有一个可用的 OpenClaw coding skill 网页抓取产品列表管道,你可以将它指向真实的电商页面。
什么是 OpenClaw?
OpenClaw 是一个开源的 AI 智能体框架。你可以把它看作一个网关,负责把语言模型连接到外部世界:你的浏览器、你的文件系统、你的消息应用,以及任何你注册为“技能”的工具。
OpenClaw 的核心由四个部分组成:
- Gateway — 持续运行的守护进程,负责在各个通道、模型和工具之间路由消息
- Brain — 你所连接的 LLM 提供商(Anthropic、OpenAI、Google 或本地模型)
- 实操 — 代理可以调用的工具:浏览器控制、shell 命令、文件访问、HTTP 请求
- 技能 — markdown 指令文件(SKILL.md),用于教会 agent 在特定任务中如何以及何时使用某个工具
在这四者当中,OpenClaw 网页抓取 skill 是本指南中最重要的部分。
OpenClaw Coding Skill 只是一个文件夹,其中包含一个 SKILL.md 文件,通常还有一个配套脚本。当你要求代理执行某项与某个 skill 描述相匹配的任务时,它会读取相应的指令并加以执行。
这就是使用 OpenClaw 进行网页抓取与 Playwright 或 Selenium 感觉截然不同的原因。后两者是你导入到自己脚本中并逐行驱动的库。OpenClaw 颠覆了这种关系:代理利用可访问性树对页面进行推理,决定如何导航,并在需要确定性、可重复的提取逻辑时调用你技能中的代码。
你仍然编写真实的代码,但由代理决定何时以及如何运行它。
| 功能 | OpenClaw | Playwright | Selenium |
| 控制模型 | 代理根据自然语言目标决定要执行的操作 | 你需要显式地为每一个动作编写脚本 | 你需要显式地为每一个动作编写脚本 |
| 设置 | CLI + 引导向导,技能注册表 | npm/pip 软件包 | 特定语言的绑定 |
| Adaptivity | 能够推断页面结构,适应布局变化 | 选择器一旦改变就会失效 | 选择器一旦改变就会失效 |
| Extensibility | Skills(SKILL.md + 脚本) | 自定义脚本 | 自定义脚本 |
| 最适合 | 由 agent 驱动的提取,适用于杂乱或不断变化的网站 | 结构固定、易于理解的网站 | 结构固定、易于理解的网站 |
| 代理处理 | 按技能或按代理配置 | 按上下文分别配置 | 按驱动分别配置 |
相比固定脚本,这种适应能力正是 OpenClaw 网页抓取框架的全部魅力所在。这种架构的好处是具备韧性。传统抓取器如果硬编码 .product-title 一旦网站重新设计其标记结构就会失效。
围绕无障碍树(accessibility tree)和代理推理构建的 OpenClaw 网页抓取框架往往能够经受住细小的布局变化。
OpenClaw 网页抓取的工作原理
在动手操作终端之前,先了解完整的请求路径会很有帮助。一个典型的 OpenClaw 网页抓取任务大致如下:

逐步讲解每个步骤:
用户请求
你用自然语言告诉 agent 你想要什么:“抓取这个页面上的产品列表,给我名称、价格和评分”
OpenClaw 智能体
Gateway 会把请求路由到你配置的模型,模型再将请求与已安装的技能进行匹配,并挑选出合适的那一个。
Browser / Fetch 工具
该 skill 的脚本会运行,既可以作为轻量级的 HTTP 抓取,也可以针对 JavaScript 密集型页面启动完整的浏览器会话。
NodeMaven 住宅代理
每一个出站请求都会通过住宅 IP 路由,而不是你服务器自身的地址,因此目标网站看到的是普通消费者流量。
目标网站
请求到达网站时,看起来就像来自某个真实位置的真实访客。
结构化数据
响应会被解析、按照你的 schema 进行校验,并以 JSON 形式交回给 agent。
中间那一步代理跳转在演示中很容易被跳过,但在生产环境中跳过它的代价高昂。我们将在下一节讲到原因。
为什么住宅代理很重要
没有代理策略的抓取一直都能奏效,直到某天不再奏效。以下是你实际要面对的问题:
- IP 信誉度。 数据中心使用的是范围狭窄的一批已知 IP 段。反爬系统维护着这些 IP 段的名单,一旦发现便会拦截或发起验证挑战。
- 速率限制。一旦请求量看起来不像人类行为,即便是一个「干净」的 IP 也会被限速。
- CAPTCHA. 可疑的流量模式会触发验证页面,而脚本无法自行解决这些页面。
- JavaScript 渲染。许多网站只有在客户端脚本运行后才会显示真实内容,而单次请求的抓取器永远不会触发这些脚本。
- 浏览器指纹识别。TLS 握手、请求头顺序和 canvas 指纹都会计入对你连接的信任评分。
- 地域限制。 有些内容只会向位于特定国家、地区、甚至特定城市的访客渲染。
- 会话持久性。 如果你的 IP 在会话中途发生变化,登录态抓取和多步结账流程都会中断。
不同的代理类型分别解决这份清单中的不同环节:
| 代理类型 | IP来源 | 稳定性 | 最适合 |
| 数据中心 | 云托管服务提供商 | 高速度,低信任 | 非敏感、低封锁风险的目标 |
| 住宅代理 | 真实的家庭设备 | 较慢,高信任度 | 电商、SERP、社交平台 |
| ISP(互联网服务提供商) | 注册在某个 ISP 名下,托管于数据中心 | 数据中心的速度,住宅 IP 的可信度 | 已登录会话、长时间运行的任务 |
| 移动代理 | 移动运营商网络(3G/4G/5G) | 信任度最高,速度不稳定 | 防护极为激进的反爬目标 |
对于大多数 OpenClaw 抓取工具的配置,其构成如下:
- 电子商务抓取 → 住宅代理,每次请求轮换,适用于大规模目录抓取
- 搜索引擎 → 住宅代理、轮换,因为 SERP 的指纹识别很激进
- AI 智能体 发起自主请求 → 带质量过滤的住宅代理,因为代理无法在运行过程中手动解决 CAPTCHA
- 社交媒体 → 住宅或移动代理、粘性会话,因为这些平台会密切追踪会话连续性
- 已登录的会话 → ISP 或粘性住宅代理,因为在整个会话期间 IP 需要保持稳定
这正是 NodeMaven 如何融入使用 OpenClaw 进行网页抓取的方案中。
它让你在同一个仪表盘中获得住宅代理和移动代理,并为高流量任务提供自动 IP 轮换。
该 IP 池拥有超过 3000 万个住宅地址,覆盖 190 多个国家和 1400 多个城市,而且每个 IP 通过质量筛选 能够将纯净率保持在 95% 以上。
安装 OpenClaw
要求
- Node.js 22.19+(推荐使用 Node 24)——不支持 Node 23
- 运行本指南中的抓取脚本需要 Python 3.10+
- 来自模型提供商的 API 密钥:Anthropic、OpenAI、Google 或本地模型端点
- macOS、Linux 或 Windows(Windows 用户应在 WSL2 下运行 OpenClaw)
安装
最快的方式是使用托管的安装脚本。它会检测你的操作系统,若缺少 Node 则自动安装,安装 OpenClaw,并自动启动引导流程:
在 Windows 上(PowerShell):
如果你已经安装了受支持的 Node 版本,并且更倾向于自行管理安装过程:
提示:如果 sharp 在安装过程中构建失败(在使用 Homebrew 的 macOS 上很常见 libvips 已安装),强制使用预编译的二进制文件,而不是从源代码编译:
openclaw onboard –install-daemon 做三件事:
- 连接你的模型提供商 — 系统提示时你粘贴进一个 API 密钥
- 将 Gateway 安装为后台服务(在 Linux 上使用 systemd,在 macOS 上使用 launchd),使其在重启后仍能运行
- 引导你完成可选的频道和技能设置,现在你可以放心地跳过,方法是 openclaw configure 稍后提供
常见错误:直接运行普通的 openclaw onboard 无需 –install-daemon 只会让 Gateway 在你当前的终端会话中运行。一旦关闭终端,该代理就会停止。如果你希望 OpenClaw 保持运行,请务必加上这个标志。
验证
openclaw status 确认 Gateway 守护进程已启动并正在监听,通常在端口 18789. openclaw doctor 检查常见的配置错误:缺失的 API 密钥、被封禁的端口或有风险的权限设置。如果其中任一命令返回错误,请先修复这些问题再继续,因为下面的每个 skill 和抓取程序都依赖于一个健康的 Gateway。
警告: 切勿在没有前置认证的情况下,将端口 18789 暴露在面向公网的服务器上。
为网页抓取配置 OpenClaw
OpenClaw 的配置保存在一个 JSON 文件中,位于 ~/.openclaw/openclaw.json,但对于抓取工作,你主要通过环境变量和 skill 级别的设置与之交互,而不是手动编辑该文件。
创建一个 .env 位于你 skill 工作目录内的文件:
下面是每个变量的作用:
- ANTHROPIC_API_KEY ——用于验证代理模型调用的身份;如果你使用的是其他模型,请替换为 OPENAI_API_KEY 或对应提供商的变量
- OPENCLAW_MODEL — 代理使用的默认模型;对于抓取任务来说,一个快速的中端模型通常就足够了,因为你不需要用最昂贵的模型来决定“点击下一页”
- NODEMAVEN_USERNAME / NODEMAVEN_PASSWORD ——你在 NodeMaven 仪表盘中的代理凭据;用户名还可以直接编码国家、城市和会话参数(例如 username-country-us-sid-98213)
- NODEMAVEN_HOST / NODEMAVEN_PORT — NodeMaven 的网关地址;端口 8080 用于 HTTP,1080 用于 SOCKS5
Skills 通过以下方式读取密钥: skills.entries.*.env 于 OpenClaw 的配置中,它会将这些内容仅在该轮次注入到该 skill 的进程中,而不是注入到共享沙箱里。这样可以让你的代理密码不出现在提示词和日志中。
一旦你的 .env 已就位,在将代理接入某个 skill 之前,先独立于 OpenClaw 验证代理连接:
如果返回的 IP 地址不是你自己的,说明代理已生效,你就可以开始构建了。
构建你的第一个抓取器
在完整的商品列表教程之前,我们先构建一个更简单的抓取器,你可以独立运行它,无需任何 skill 封装。这个版本通过 NodeMaven 代理获取页面、解析页面、在失败时重试,并将干净的 JSON 写入磁盘。
快速了解一下每个部分的作用:
- Imports — requests 库 处理 HTTP、 BeautifulSoup 解析 HTML, python-dotenv 加载你的 .env 文件中,这样凭据就绝不会出现在脚本本身之中
- 代理设置 — PROXY_URL 用你的 NodeMaven 凭据构建一个经过认证的单一代理字符串,同时用于 HTTP 和 HTTPS 流量
- fetch_with_retry — 使用指数退避重试失败的请求(2 ** attempt 秒),因此单个断开的连接不会导致整个运行任务失败
- scrape_page — 实际的提取逻辑,这部分是你需要针对每个网站进行自定义的
- save_json — 将结果以任何下游工具都能使用的格式写入磁盘
在运行之前先安装依赖项:
这个脚本可以独立运行,但它的形态也正是 OpenClaw skill 所封装的那种脚本。这是使用 OpenClaw 进行网页抓取的核心构建模块,无论规模大小,而这正是我们接下来要封装成完整 skill 的内容。
OpenClaw 编程技能(网页抓取商品列表示例)
如果你要抓取电商数据,这一节最为重要。我们将把上面的抓取程序封装成一个正规的 OpenClaw skill,这样每当你要求 agent 拉取商品列表时,它都能调用这个程序。
下面这个 OpenClaw 编码技能(抓取商品列表的网页)模式会为每件商品提取六个字段: 名称, 价格, 可用性, 评分, 产品 URL,以及 图片 URL,全部以 JSON 格式返回。
先从文件夹结构开始:
SKILL.md 需要 YAML frontmatter 以及代理会遵循的指令:
Declaring env 在 frontmatter 的 metadata.openclaw.requires 这一块很重要:如果脚本引用了 frontmatter 未声明的变量,ClawHub 的扫描会标记元数据不匹配,并阻止该技能发布。请保持两者同步。
现在是提取脚本本身:
逐行来看,值得指出的部分有:
- 选择器有意设置得较为宽松 (.product-card、.product、[data-product]),因为真实的商品目录页面很少在类名上保持一致;在你检查页面之后,请调整这些选择器以匹配你的目标页面
- 除 name 外,每个字段都是可选的 — 缺失的价格或评分不应该让整个抓取过程崩溃,而应该直接返回为 null
- try/except 放在循环内部,意味着一张格式错误的产品卡片不会拖垮页面上其他四十张卡片
- argparse 让 OpenClaw skill 直接从代理运行的命令中调用该脚本,并将 URL 和输出路径作为参数传入
和大多数 OpenClaw 网页抓取 skill 一样,安装此 skill 只需将文件夹放入 ~/.openclaw/skills/product-scraper/ 并重启 Gateway:
确认它已正确加载:
If product-scraper shows up in that list, ask the agent directly: “Scrape the product listings on https://example-store.com/bestsellers”. It reads the skill, runs the script through your NodeMaven proxy, and reports back what it found. This OpenClaw coding skill setup is the same pattern you’ll reuse for any structured extraction task, just with different selectors.
OpenClaw 网页抓取示例
一旦上面的模式跑通,大多数其他 OpenClaw 网页抓取示例都只是同一脚本的变体,只是解析逻辑不同。下面是五个常见的示例。
示例 1:新闻网站
请注意 word_count 字段,而不是完整的文章正文。复制完整文章文本会引发版权问题;请提取元数据和摘要,而非逐字内容。
示例 2:文档
在决定哪些页面需要更深入抓取之前,先为文档门户构建一张站点地图,这非常有用。
示例 3:Google 搜索
警告: Google 的结果标记经常发生变化,并会对脚本化流量进行严格的速率限制。 轮换住宅 IP 在这里几乎是必需的,即便如此,也要预期需要定期更新选择器。
示例 4:产品页面
重用 parse_products 函数(来自上一节),但将其指向单个产品页面而非列表页面,并替换 CSS 选择器以匹配详情页布局(规格表、图片库和评价数量,而非卡片网格)。
示例 5:博客文章
适合用来构建竞争对手博客的内容日历视图,而无需抓取实际的正文内容。
最佳实践
在这里养成好习惯,能在后续省下大量实际的调试时间:
- 遵守 robots.txt ——在抓取前检查它,并遵守被禁止的路径
- 在请求之间添加延迟 就算是随机的 1 到 3 秒延迟,看起来也比固定间隔更不像机器行为
- 为所有环节加入重试机制 — 网络会出故障,代理偶尔会超时,网站会限流;带退避的重试可以吸收这三种情况
- 在开发过程中缓存响应 ——在你还在调试选择器时,不要把同一个页面重复抓取十次
- 记录一切日志 ——状态码、重试次数和解析失败信息,这样一次失败的运行事后可供调试
- 批量抓取时轮换 IP,会话则固定使用一个 IP ——让代理行为去适配任务,而不是反过来
- 保持结构化输出的一致性 稳定的 JSON schema 会让下游处理简单得多
- 持续监控成功率的变化 — 成功率缓慢下降通常是网站改变防御机制的第一个信号
故障排除
大多数问题都遵循可预测的模式。以下是你可能遇到的情况以及解决方法。
| Issue | 原因 | 解决方案 |
| 403 Forbidden | IP 或指纹被标记为机器人 | 切换到住宅代理,轮换 IP,检查请求头是否与真实浏览器匹配 |
| 429 请求过多 | 触发了速率限制 | 增加延迟、降低并发、更积极地轮换 IP |
| 超时 | 代理或目标服务器响应缓慢 | 增加 超时,采用退避策略重试,检查代理地区是否与目标匹配 |
| JavaScript 未渲染 | 页面需要客户端执行 | 使用 OpenClaw 的浏览器工具,而不是普通的 HTTP 抓取 |
| 空白 HTML | 机器人检测返回空白的外壳页面 | 先用真实浏览器验证,检查是否存在 JS 挑战 |
| Blocked IP | 被过度使用或信誉较低的地址 | 更换服务商,或为你的代理池启用质量过滤器 |
| 无效代理 | 凭据错误或代理字符串格式不正确 | 从仪表板重新复制凭据,并用独立的 curl 测试进行验证 |
| 日志中的 OpenClaw 错误 | 技能配置错误或缺少依赖项 | 运行 openclaw doctor 和 openclaw skills list –eligible |
| 安装错误 | npm install 之后的 PATH 问题 | 检查 npm prefix -g 位于你的 $PATH,重启终端 |
| API 错误 | 无效或已过期的模型 API 密钥 | 重新运行 openclaw configure 然后重新输入密钥 |
为什么要在 OpenClaw 中使用 NodeMaven?
“在演示中能用”与“每天都能用”之间的差距,几乎总是归结于代理层。下面是这些方案在实际使用中的真实对比:
| 设置 | 会发生什么 |
| 无代理 | 在任何有中等程度防护的网站上,你服务器的 IP 都会在几小时内被标记 |
| 廉价/共享数据中心代理 | 由于该 IP 段已经列入大多数反机器人黑名单,因此会很快被封禁 |
| 高级住宅代理(通用) | 可以使用,但轮换和会话控制的配置往往比较繁琐 |
| NodeMaven | 自动 轮换、粘性会话、95% 以上的纯净 IP 质量,以及在电商、搜索和社交目标上稳定的成功率 |
在真实场景中:一个 OpenClaw 抓取工具每天从十几家零售商拉取定价数据,需要为每个请求分配一个全新 IP 以避免被识别出模式;而基于 LinkedIn 或账户的工作流则恰恰相反,需要在整个会话期间保持一个稳定的 IP。
NodeMaven 的控制面板让你可以在同一个账户内、跨 190 多个国家和 1,400 多座城市,在轮换会话和粘性会话之间自由切换,无需为每种使用场景分别对接不同的供应商。
结论
OpenClaw 为你提供了一种由智能体驱动的网页抓取方式,它比硬编码的选择器脚本适应性更强,而 skills 则让你能够轻松地把这套逻辑打包成可复用的组件。
但如果没有一层能让你的请求看起来像普通流量的代理,这一切都无法成立。现在你已经拥有一套完整的 OpenClaw 网页抓取编程技能,配合干净的住宅 IP,随时可以对准真实目标。
如果你想在选定套餐之前先测试一下这套配置的代理部分, NodeMaven 的试用 是一种低成本的方式,可以观察你的特定目标网站在背后有真实住宅 IP 池支撑时的表现。



