如何通过结构化提取减少Claude代码网页研究令牌
Lead Scraping Automation Engineer
TL;DR:
- Claude Code 网络研究令牌受到模型接收到的内容驱动,而不仅仅是穿越网络的内容。 原始 HTML、重复导航、重复 URL、工具元数据和冗长的结果都可能消耗上下文。
- 在推理步骤之前减少内容。 优先进行主要内容提取、狭窄选择器、字段级提取,以及一个拒绝不完整结果的 JSON 架构。
- 保留源 URL 和证据片段。 只有在答案保持可审计和完整的情况下,较小的负载才是有用的。
- MCP 可以将获取与推理分开。 Claude Code 选择一个有限的无抓取工具;该工具仅返回任务所需的字段。
- 我们的可重复代理测试将固定输入从 181,892 切割到 434 个比较令牌。 它使用了一个公共文档页面、一个问题和
cl100k_base;这些不是 Claude 计费令牌。
Claude Code 可以搜索网络、抓取页面、调用 MCP 工具,并对返回的材料进行推理。这使得研究变得方便,但便利可能隐藏了一个基本的成本问题:一个需要六个事实的问题可能会把成千上万的无关字符拉入上下文中。
解决办法不是“更积极地总结”。总结是另一个模型任务,可能会删除你所需的证据。更好的工作流在获取时减少内容,验证结果,并向主要模型发送一个小的证据合同。
本教程为 Claude Code 建立了与无抓取 MCP 服务器和通用抓取 API 模式相结合的工作流。
Claude Code 网络研究令牌来源
将研究路径视为四个独立的卷:
获取的字节 → 提取的字符 → 模型上下文令牌 → 结构化答案令牌
它们是相关的,但不是可以互换的。
页面获取卷
这是浏览器、获取工具或抓取服务所接收到的内容。渲染的页面可能包含脚本、样式、导航、cookie 横幅、嵌入状态以及多个路由的内容。获取卷影响网络和抓取成本,但它不必进入 Claude 的上下文。
返回的字符
工具选择它返回的内容:原始 HTML、可读的 Markdown、选定元素或 JSON 对象。这是最有用的控制点。在这里删除样板可以节省后续每一步的处理。
主模型上下文
Claude Code 看到系统指令、对话历史、工具定义、工具结果和你当前的请求。简洁的工具响应仍然可以与大型项目上下文相邻。使用当前的 Claude Code 上下文窗口文档 来了解上下文是如何管理的,但测量自己的工作流而不是假设一个固定的容量或价格。
结构化答案输出
一个 JSON 架构约束最终答案。它不会自动缩小之前的页面内容。对工具结果和最终响应都应用结构。
在优化之前建立基准
使用一个研究问题和一个固定源集。记录:
- 请求的源 URL;
- 每个工具返回的字符;
- 模型和 Claude Code 版本;
- 用于测量的分词器或 API 使用字段;
- 输入和输出令牌计数;
- 所需答案字段和完整性结果。
Claude Code 使用 claude --help 显示当前 CLI 选项。在用于本文的机器上,Claude Code 2.1.162 列出了 --mcp-config,--tools,--output-format 和 --json-schema。当前的 Claude Code 工具参考 文档将 WebSearch 和 WebFetch 列为内置工具。
不要将这些 Claude Code 工具与 Anthropic API 网络工具混淆。API 的 网络获取文档 描述了服务器端功能,例如动态过滤。为 API 记录的功能并不自动成为 Claude Code WebFetch 选项。
第1步:优先考虑主要内容而不是原始 HTML
原始 HTML 对于调试选择器或保留确切标记是有用的。它通常是一个较差的研究负载。
要求获取层删除:
- 脚本、样式、SVG 和模板内容;
- 网站导航和重复的页脚;
- 同意和帐户壳;
- 问题不需要的隐藏状态;
- 无关的推荐和评论。
可读的 Markdown 通常是一个良好的首次减少。它保留标题、列表、链接和代码,同时丢弃大部分展示层。仍然要验证标题和所需部分的存在;干净的登录页并不是成功的提取。
第2步:仅提取问题所需的字段
主要内容可以比答案大得多。在抓取多个页面之前,将问题转化为提取合同。
对于文档比较,合同可能是:
json
{
"type": "object",
"required": ["source_url", "tools", "complete"],
"properties": {
"source_url": { "type": "string", "format": "uri" },
"tools": {
"type": "array",
"items": {
"type": "object",
"required": ["name", "evidence"],
"properties": {
"name": { "type": "string" },
"evidence": { "type": "string", "maxLength": 1200 }
}
}
},
"complete": { "type": "boolean" }
}
}
保持证据简短,但不要将其减少到不支持的值。像 supports_web: true 这样的字段紧凑且难以审核。源 URL 加上一个有限的证据片段让审核者能够验证解释。
对于重复页面形状,使用定向选择器或结构化提取端点。对于多样化页面,先请求可读内容,然后选择相关部分,尽可能使用确定性代码。
第 3 步:在获取之前去重 URL
研究代理通常通过导航、搜索参数、语言别名或片段遇到相同的文档。在获取之前进行标准化:
- 解析相对 URL;
- 移除片段;
- 应用批准的查询参数政策;
- 仅跟随重定向一次并记录最终的规范身份;
- 对接受的内容进行哈希以捕捉镜像或重复。
不要删除每个查询参数。地区、版本、产品或日期参数可能会改变文档。标准化规则属于源政策,而不是通用字符串清洁工具。
一个小缓存也可以防止在一次运行中重复收集。以规范源、地区、提取合同版本和新鲜度要求为键。
第 4 步:将 Claude Code 连接到 Scrapeless MCP
MCP 保持面向代理的界面简洁。Claude Code 可以看到命名的工具和模式;Scrapeless 在它们背后处理搜索、公共页面抓取或云浏览器操作。
先决条件:
- 已安装 Claude Code 和 Node.js;
- 具有 Scrapeless 帐户和 API 密钥;
- 有授权的公共目标;
- 一个页面和工具调用预算。
将密钥存储在环境变量中。这个项目级示例使用变量扩展,因此秘密不会被提交:
json
{
"mcpServers": {
"scrapeless": {
"command": "npx",
"args": ["-y", "scrapeless-mcp-server"],
"env": {
"SCRAPELESS_KEY": "${SCRAPELESS_KEY}"
}
}
}
}
将对象保存为 .mcp.json 在批准的项目中,并从该项目开始 Claude Code。运行 claude mcp list 以检查连接健康。Claude Code 需要对项目范围的 MCP 服务器的批准;在批准之前检查命令和环境密钥。
在编辑验证期间,当前的 Scrapeless 包通过标准 MCP 客户端流程通过 stdio 启动。未执行凭证网络调用,因为在验证环境中未存在生产密钥。将第一次真实的工具调用视为验收测试:一个允许的 URL,一个必需的字段集,以及不进行广泛抓取。
当前的 Claude Code MCP 文档 解释了范围、传输、工具发现、输出限制和环境变量扩展。Scrapeless Claude 集成指南 提供了特定产品的服务器配置。
第 5 步:给代理一个有限的研究合同
“研究这个主题”邀请探索。有限的提示定义了来源、字段和停止条件。
使用如下请求:
搜索最多五个关于命名产品的官方来源。去除规范 URL 的重复。对于每个接受的来源,返回标题、最终 URL、发布时间或更新日期(可见时)以及支持所需特征的一个证据片段。在三个完整来源后停止。标记缺失字段;不要推断它们。
这个合同同时控制四种失败模式:无限搜索、重复获取、冗长结果和虚构字段。
还需过滤 MCP 工具集。文档任务可能需要搜索和一次性 Markdown 提取,而不是每个浏览器操作。更少的可见工具减少选择模糊性,简化权限审查。
第 6 步:一起衡量减少和完整性
我们使用公共的 Claude Code 工具参考页面和一个固定问题:
哪些内置的 Claude Code 工具可以搜索或获取公共网络内容,以及研究工作流程应该应用什么限制?
同一 cl100k_base 分词器计算了问题和每种材料变体。这是一个开放的比较代理,不是 Anthropic 的分词器,也不是 Claude 的计费测量。
| 与问题一同发送的材料 | 字符数 | 比较标记 | 完整性检查 |
|---|---|---|---|
| 原始 HTML | 548,951 | 181,892 | 所需术语存在但被埋藏 |
| 主要内容 | 45,931 | 9,444 | WebSearch 和 WebFetch 存在 |
| 定向 JSON | 2,138 | 434 | 两个工具加上源和证据字段存在 |
定向 JSON 使用的比较标记比主要内容少约 95.4%,比原始 HTML 少 99.8%。这些百分比仅描述此页面和此提取合同。
完整性检查故意较窄:两个必需的工具名称必须存在于主要文本和提取的对象中,并保留源身份。生产评估还应评分每个证据片段是否支持最终答案。
第7步:添加结果接受门
压缩并不等同于正确性。在内容进入主要推理步骤之前,请验证:
- 最终URL属于允许列表;
- 页面身份与请求的文档匹配;
- 所需字段存在且具有正确的类型;
- 证据包含所声称的实体或术语;
- 内容不是错误、同意、登录或访问挑战的外壳;
- 记录包括收集时间和提取合同版本;
- 返回的总字符保持在任务预算之内。
返回类型结果,例如 accepted、missing_fields、wrong_page、access_required 或 over_budget。Claude可以决定是否停止或使用其他批准的路由,而不把每次失败视为普通的散文。
何时使用通用抓取API代替
当Claude代码需要交互式地发现和选择网络功能时,MCP是有用的。当您的程序已经知道目标并希望从CI、数据作业或服务中获得可预测请求时,通用抓取API是更好的边界。
当您需要时,请使用API路径:
- 从确定性的应用代码调用提取;
- 在代理之外集中速率和预算控制;
- 在Claude代码运行之前标准化结果;
- 在多个研究会话中缓存接受的记录。
同样的原则适用:请求可以满足接受合同的最低输出,然后仅将接受的字段发送给Claude。查看 通用抓取API产品页面 和 当前文档 以获取支持的端点和请求字段。
常见错误
发送原始页面“以防万一”
这将选择工作转移到系统中最依赖上下文的部分。请将原材料保留在提示之外,而是发送证据包。
在没有回答合同的情况下优化令牌
省略所需事实的小响应并不高效。按成本计算接受的答案,而不仅仅是令牌减少。
降低源身份
没有最终URL和证据,结果无法安全审计或刷新。
在提示或提交的配置中暴露密钥
使用环境变量和项目秘密控制。切勿将生产密钥粘贴到提示、示例、日志或代码库中。
假设工具输出限制保证相关性
输出上限防止了无限制的大小,但并不选择正确的段落或验证页面。
生产检查表
- 修正基准的提问、模型、源集和输出架构。
- 在每个工具边界计算返回的字符。
- 在收集之前去重规范URL。
- 优先选择Markdown、选择器或结构化字段,而不是原始HTML。
- 保留最终URL、证据、收集时间和合同版本。
- 在主要模型推理之前拒绝错误页面和不完整的结果。
- 限制可见的MCP工具和批准的目标。
- 保持秘密在提示和版本控制之外。
- 比较接受结果的成本,而不是孤立的令牌计数。
阅读 Scrapeless MCP服务器概述,检查 Scrapeless定价,并 从一个有限的研究任务开始。
常见问题解答
问:WebFetch是否总是使用比浏览器工具更少的Claude代码令牌?
不。令牌的使用取决于返回到上下文的材料。简洁的浏览器提取可能比冗长的获取更小,而干净的提取可能比浏览器HTML更小。测量返回的内容。
问:JSON模式是否可以减少输入令牌?
它可以减少并验证结构化输出,但并不会自动缩小页面内容。在提取边界和最终答案处应用模式(如有需要)。
问:本文中的令牌计数是Claude令牌吗?
不是。它们是可重复的 cl100k_base 比较代理。使用当前的Anthropic令牌计数或使用接口与您的确切Claude模型一起使用,以获取与计费相关的数字。
问:为什么用MCP而不是直接调用抓取API?
使用 MCP 当 Claude Code 应该在交互任务中发现并调用一个有限工具。直接 API 当应用代码已经知道何时以及如何收集页面时使用。
问:我如何知道提取没有移除所需的事实?
在收集之前定义所需字段和证据,然后进行完整性和语义检查。将源 URL 和原始快照保留在提示外,以便审计或重新处理。
在Scrapeless,我们仅访问公开可用的数据,并严格遵循适用的法律、法规和网站隐私政策。本博客中的内容仅供演示之用,不涉及任何非法或侵权活动。我们对使用本博客或第三方链接中的信息不做任何保证,并免除所有责任。在进行任何抓取活动之前,请咨询您的法律顾问,并审查目标网站的服务条款或获取必要的许可。



