Files
opendan/doc/opendan-data-scraping-dev-guide.md
2026-03-28 11:08:58 -07:00

8.3 KiB
Raw Permalink Blame History

Building Data Scraping Skills for OpenDAN

为 OpenDAN Agent 开发数据抓取能力:第三方开发者指南


0. 为什么在 OpenDAN 上做,而不是自己写脚本?

你当然可以自己写一个 Python 爬虫跑在 crontab 里。但你大概已经发现了这些问题:

你遇到的问题 自己写脚本 n8n / Make 等自动化平台 OpenDAN
页面结构变了,脚本挂了 手动修 selector,重新部署 同上,workflow 断掉需要人工介入 Agent 有上下文理解能力,可以根据 Skill 里的判断标准自行调整抓取策略
需要过登录墙 / 验证码 自己集成 Playwright + 各种 hack 平台提供的浏览器能力有限 Agent 可以调用浏览器能力,像人一样操作页面
抓到的数据只有自己能用 数据格式随意,换个项目又得重新写 平台内部闭环,数据导出麻烦 统一 Schema,本地所有 Agent 共享同一份数据
想加 AI 处理(摘要/分类/理解) 自己对接 API,管 token、管 key 需要额外付费接 AI 节点 AICC 统一模型调用,开发者不用管供应商差异
多个抓取任务需要协同 自己写调度逻辑 平台限制了组合方式 多个 Skill 天然可组合,Agent 按目标自主调度
想让别人也能用你的能力 发个 GitHub repo,用户自行部署 发布到平台 marketplace,但受平台规则约束 发布 Skill + Tool 即可,其他用户的 Agent 直接调用

一句话:你写的不是一个跑一次就扔的脚本,而是一个可以被任何 Agent 反复使用的能力。

传统爬虫是"写死的流程"——一旦目标网站变化,流程就断。 OpenDAN Skill 是"给 Agent 的操作说明"——Agent 根据说明自主决策,遇到异常可以自行调整。

这意味着你的工作成果有更长的生命周期,也有更大的复用面。


1. 你要做的三件事

为 OpenDAN Agent 提供数据抓取能力,只需要准备三样东西:

Tool — 真正执行抓取的程序。CLI 工具、脚本、小程序都行。

Skill — 告诉 Agent 怎么用这些 Tool 的操作说明。不是自动化脚本,是"目标 + 工具 + 判断标准"的组合。

Schema — 抓取结果的数据格式。保证不同开发者、不同 Agent 之间的数据可以互通。


2. 从 Tool 开始,先跑通一个最小抓取

选语言

推荐 TypeScript / tsxPython 也可以。

写什么

你的 Tool 就是一个普通 CLI 程序,做的事情和你过去写爬虫一样:

  • 调 API
  • 跑 Playwright / 无头浏览器
  • 解析页面
  • 输出结构化 JSON

怎么发布

第一版完全不需要学习 OpenDAN / BuckyOS 的包管理体系。 你过去怎么发 npm 包,现在就怎么发:

  • npx
  • pnpm
  • 或者就是本地脚本

等跑通以后,再考虑正式打包。


3. 写 Skill:给 Agent 的操作说明书

Skill 不是"严格一步不差的自动化脚本"。 它更像是你写给一个聪明但不了解具体业务的同事的操作指南。

一个好的 Skill 要写清楚以下内容:

目标

给定一个用户账号,抓取其公开资料、帖子、媒体内容。

或者:

给定一个商品链接,抓取其标题、价格、评论、历史价格。

可用工具

列出 Agent 可以调用的 Tool,例如:

  • fetch-x-profile — 抓取 X 用户资料
  • fetch-x-posts — 抓取 X 用户帖子
  • fetch-instagram-media — 抓取 Instagram 媒体

判断标准

Agent 需要知道每一步"做对了"是什么样子:

  • profile 拿到了且字段完整 → 第一步成功
  • 帖子列表为空 → 需要判断是"真的没有"还是"抓取失败"
  • 页面返回登录墙 → 切换到浏览器模式重试

常见错误和修正建议

  • 账号不存在 → 停止,返回明确错误
  • 页面结构变化 → 尝试用浏览器模式重新抓取
  • 请求频率过高 → 降速重试
  • 需要登录 → 提示用户提供凭据或切换策略

核心原则:给方向、给工具、给判断方法。 Agent Loop 自身有纠错能力,Skill 的重点不是"零错误执行",而是让 Agent 知道目标在哪、手里有什么、怎么判断是否在逼近目标。


4. 定义数据格式:目录结构就是数据库

抓取结果必须有统一结构,否则不同 Skill、不同 Agent 之间没法复用。

推荐用目录结构直接组织数据:

data/
  x/
    alice/
      profile.json          # 用户资料
      posts/
        post_001.json
        post_002.json
      media/
        img_001.jpg
  instagram/
    alice/
      profile.json
      posts/
      media/
  bindings/
    person_alice.json        # 跨平台身份绑定

规则很简单:

  • {platform}/{account_id}/ 是基本单元
  • profile.json 存用户资料
  • posts/ 存帖子
  • media/ 存媒体文件
  • bindings/ 把同一个人在不同平台的账号关联起来

统一格式带来的两个直接好处

多 Skill 协同补数据。 一个 Skill 抓 profile,一个 Skill 抓 posts,一个 Skill 抓 comments——最终都落到同一个目录结构里,互不干扰。

不同 Agent 复用结果。 Agent A 已经抓过的数据,Agent B 直接读取就行,不用重复抓。在 OpenDAN / BuckyOS 体系里,Agent 可以暴露服务接口,这意味着同一套 Skill 不只是"教 Agent 怎么抓",还会自然形成抓取结果的共享网络


5. 什么时候需要用 OpenDAN 的平台能力

不是所有场景都需要学额外的东西。按你的需求分三档:

情况 A:普通抓取 → 不需要任何平台能力

如果你的 Tool 只做 HTTP 请求、页面解析、Playwright 抓取、文件处理,就按普通程序写,不用学任何额外概念。

情况 B:Tool 内部需要 AI → 接入 AICC

如果你想在工具内部做语义解析、内容摘要、评论分类、图像理解,接入 AICC 即可。

AICC 的作用是统一模型调用。你给模型名、给 prompt、拿结果。不用自己折腾不同模型供应商的接入。

只有 Tool 里需要 AI 时,才需要了解 AICC。

情况 C:必须操作浏览器 / 桌面 → 使用 AgentPC

有些网站没有 API 或反爬很强,需要浏览器自动化:获取页面截图、点击、输入、滚动、观察结果、循环执行。

这时使用 OpenDAN 的 AgentPC / 浏览器能力。如果流程特别复杂,建议把浏览器操作任务交给专门的 Agent 处理,而不是全塞进一个 Tool。


6. 最小可用交付物

你的第一版只需要做到这样:

my-scraping-skill/
  skill.md                    # 操作说明书
  tools/
    fetch-x-profile.ts        # CLI 工具
    fetch-x-posts.ts
  schemas/
    profile.schema.json        # 数据结构定义
    post.schema.json
  data-example/                # 实际结果示例
    x/
      alice/
        profile.json
        posts/
          post_001.json

各部分职责:

  • skill.md — 适用范围、输入参数、推荐工具、成功判断、常见错误、输出目录
  • tools/ — 你的 CLI 工具或脚本
  • schemas/ — 你约定的数据结构(JSON Schema)
  • data-example/ — 给其他开发者看的实际结果示例

7. 推荐上手顺序

不要一开始做"大而全"。按这个顺序最容易跑通:

  1. 选一个网站 — 比如 X、Instagram、Amazon 其中一个
  2. 先定义结果格式 — 想清楚 profile、post、media 怎么存
  3. 写一个最小 Tool — 先抓到最核心的一种数据
  4. 写一个最小 Skill — 把目标、工具、判断标准写清楚
  5. 跑通一次完整流程 — 输入一个账号,输出一套目录
  6. 再补充能力 — 评论、图片、视频、跨平台绑定

8. 总结

为 OpenDAN Agent 提供数据抓取能力,本质上就是:

写一个抓取工具,写一份 Agent 能看懂的使用说明,再把结果按统一格式存下来。

三条核心原则:

  • Tool 负责执行 — 做具体的抓取动作
  • Skill 负责说明 — 告诉 Agent 怎么用、怎么判断
  • Schema 负责复用 — 保证结果能被任何 Agent 直接使用

和传统爬虫的本质区别在于:你写的不是一个只能自己用的脚本,而是一个可以被整个 Agent 生态复用的能力模块