前言¶
在 DeepSeek Harness(DSH)中,read_url 适合回答“这个页面说了什么”,但它将页面解析为文本或 Markdown 后,会丢失元数据(如排名、价格、点赞数)与具体条目之间的关联。
dsh-fetch-data 旨在回答“这些数据到底是什么”。它拦截页面的真实数据 API(XHR/fetch JSON),提取出结构化的字段,保留精确的字段归属。
插件介绍¶
dsh-fetch-data 是 DeepSeek Harness 的结构化数据提取插件。它通过浏览器引擎(Playwright)捕获页面加载过程中的网络请求,提取出 JSON 接口中的数据,并返回给 DSH 使用。
- 插件名:
dsh-fetch-data - 维护者:2672243194
- 许可证:MIT
核心功能¶
该插件主要提供以下能力:
- 拦截 API:捕获页面的 XHR 和 fetch 请求,获取真实的 JSON 响应。
- 模式提取:
- 结构模式:返回自动选择的端点结构以及所有 JSON 接口清单(路径、大小、是否含数组),方便模型选择具体接口。
- 字段模式:提取指定的字段路径(如
data.list[].title)。
- 自动选择:自动从捕获的 JSON 中选择包含数组的最大端点作为默认数据源。
- 增强捕获:支持自动滚动触发懒加载数据,支持自动解包 JSONP 响应。
安装与启用¶
使用前需安装 Playwright 作为浏览器引擎,然后通过 DSH 命令添加插件。
# 1. 进入 DSH 配置目录
cd <DSH profile dir>
# 2. 安装 Playwright 并安装 Chromium 浏览器
npm i playwright && npx playwright install chromium
# 3. 添加插件
dsh plugin --profile web add github:2672243194/dsh-fetch-data
使用示例¶
插件提供 fetch_data 函数,支持以下参数:
fetch_data(url, api?, fields?, maxItems?)
1. 结构模式(默认)¶
不传 fields 参数时,返回接口结构概览和所有可用的 JSON 接口清单。这有助于模型确定具体的数据接口。
页面 25 个 JSON 接口
选中: /x/web-interface/ranking/v2 (137763B)
结构: { code: number, message: string, ttl: number, data: { note: string, list: [100] { aid: number, ... } } }
接口清单(可传 api=<路径> 指定其中一个再提取字段):
/x/web-interface/nav · 249B
/x/vip/ads/materials · 1140B · 含数组
...
2. 字段模式¶
传入 fields 参数,提取具体的字段值。[] 用于表示数组路径。
data.list[].title (前5条):
用MC还原《神的随波逐流》 【B萌应援】
WasteTheFallen丨首曝PV&实机演示:凝视深渊,人性渐泯
...
data.list[].stat.view (前5条):
2428730
10326863
...
3. 固定端点模式¶
通过 api 参数强制指定某个接口,忽略自动选择逻辑。
fetch_data(url, "/x/web-interface/ranking/v2")
适用场景与限制¶
- 适用场景:适用于需要精确数值、列表数据的抓取,如排行榜、商品价格、文章阅读量等。
- 登录限制:无法访问登录墙后的 API(与
read_url行为一致)。 - 静态站点:纯静态站点会返回“no JSON API captured”错误。
- 依赖要求:需要 Node.js >= 20。
插件设计为零运行时依赖(除 Node.js 内置模块外),但必须依赖 Playwright 作为浏览器引擎来实现网络拦截。
结语¶
dsh-fetch-data 通过拦截真实 API 弥补了文本提取器在数据精度上的不足,适合需要获取精确数值和结构化数据的场景。