Page Fetch

从网页中稳定提取可读内容,支持多层级降级策略,优先轻量级获取。

已扫描
适合谁
需要批量提取网页内容的研究人员、希望自动化信息采集的办公用户
不适合谁
需长期保存网页快照的用户、依赖本地文件持久化存储的场景
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @ylkangpeter/page-fetch

Skill 说明

命令、参数、文件名以原文为准

Page Fetch

使用此技能可以可复现的方式提取网页内容,适用于不同模型且尽量减少对浏览器的依赖,仅在必要时才启用。

该技能设计优先考虑可靠性:

  • 优先使用轻量级、确定性的抓取方式
  • 在升级前先检查页面内嵌数据
  • 仅在必要时才使用真实浏览器渲染
  • 清晰报告所用的提取方法及任何访问限制

本技能适用场景

当用户提出以下类型请求时,请使用此技能:

  • “看一下这个网页的内容”
  • “打开这篇文章并总结一下”
  • “告诉我这个页面说了什么”
  • “翻译这个网页”
  • “检查这个页面是否提到 X”
  • “引用这个文档页面的主要观点”

此技能最适合处理:

  • 新闻文章
  • 博客文章
  • 文档页面
  • 产品页面
  • 一般公开网页

本技能并非万能。若页面受登录、验证码、地区限制或强反机器人机制保护,请明确告知用户。

设计目标

核心目标是跨模型可靠性

不同大模型常采用各自随意的网页读取方式。本技能通过提供统一路径,降低这种差异性:

  1. mp.weixin.qq.com 链接优先路由至专用微信提取器
  2. 对通用网页优先尝试轻量级确定性提取
  3. 若存在内嵌页面数据,则进行检查
  4. 仅在必要时才使用真实浏览器
  5. 明确告知用户所使用的路径及限制条件

工作流程

步骤 1:默认使用统一运行器

对于常规网页读取任务,优先调用封装脚本:

python3 scripts/page_fetch.py "https://example.com/article" --format json

其行为包括:

  • 自动将 mp.weixin.qq.com 链接路由至专用微信提取器
  • 对通用网页使用轻量级 HTML 提取
  • 仅在必要时才升级到浏览器渲染
  • 默认持久化文件,除非显式传入 --save-json
  • 永远不会默认将临时 JSON 写入当前工作目录

持久化规则:

  • 默认:不写入磁盘
  • 仅当调用方显式指定 --save-json 时才保存
  • 若请求保存但未指定 --output,则写入由调用方或本地运行时约定的非工作区路径
  • 不将临时产物写入工作区根目录

步骤 2:调试或强制特定方法时直接使用脚本

仅在需要调试或强制特定提取路径时,才直接调用脚本。

微信公众号文章

python3 scripts/fetch_wechat_article.py "https://mp.weixin.qq.com/s/..." --format json

其功能包括:

  • 使用微信移动端风格的请求头
  • 从页面 meta 标签和脚本变量中提取文章元数据
  • #js_content / .rich_media_content 提取正文内容
  • 当页面被验证或反机器人流程替换时,明确报告访问限制
  • 不持久化文件;仅返回结构化提取结果

输出中需关注的字段:

  • title:标题
  • author:作者
  • account_nickname:账号昵称
  • published_time:发布时间
  • text:正文文本
  • method:使用的方法
  • access_limited:是否受限
  • access_limit_reason:受限原因

通用轻量级抓取

python3 scripts/fetch_page.py "https://example.com/article" --format json

其功能包括:

  • 使用 requests 获取原始 HTML
  • 从 HTML/meta 标签中提取元数据
  • 检查 JSON-LD 数据
  • 检查内嵌负载(如 __NEXT_DATA__
  • 降级为 DOM 段落提取作为后备

输出中需关注的字段:

  • title:标题
  • author:作者
  • published_time:发布时间
  • text:正文文本
  • method:使用的方法
  • notes:附加说明

浏览器渲染回退方案

若轻量级路径返回内容稀疏、损坏或明显不完整,请执行:

python3 scripts/render_page.py "https://example.com/article" --format json

其功能包括:

  • 通过 Node Playwright 启动无头 Chromium
  • 等待页面完全渲染
  • 从渲染后的 DOM 中提取标题、元数据和可读文本

仅在必要时使用。相比第一阶段提取器,该方式更慢且资源消耗更高。

步骤 3:报告方法与限制

始终向用户说明实际使用的提取方法:

  • wechat-dom
  • wechat-access-limited
  • json-ld
  • embedded-data:__NEXT_DATA__
  • dom-paragraphs
  • browser-render:playwright

并在相关情况下提及已知限制:

  • 文本被截断
  • 仅获取元数据
  • 浏览器运行时不可用
  • 登录墙 / 验证码 / 地区限制
  • 反机器人拦截

输出契约

使用本技能时,应尽可能返回以下内容:

  • 页面标题
  • 作者及发布/更新时间
  • 主体正文文本或简洁忠实的摘要
  • 使用的提取方法
  • 缺失部分、不确定性或访问限制说明

不得在仅获取元数据或片段的情况下暗示已完整访问页面。

脚本说明

scripts/page_fetch.py

用途:

  • 统一的无持久化入口点
  • 自动路由微信与通用网页
  • 仅在轻量提取不足时升级至浏览器渲染
  • 仅当显式请求 --save-json 时才保存 JSON

典型用法:

python3 scripts/page_fetch.py "https://example.com/article" --format json

可选的显式持久化:

python3 scripts/page_fetch.py "https://example.com/article" --format json --save-json --output ./example.json

输出字段:

  • 所有来自选定提取路径的字段
  • notes:包含运行步骤追踪信息
  • saved_to:仅在显式持久化请求时返回

scripts/fetch_wechat_article.py

用途:

  • 无持久化的微信公众号文章提取
  • 专用于 mp.weixin.qq.com 文章页

典型用法:

python3 scripts/fetch_wechat_article.py "https://mp.weixin.qq.com/s/..." --format json --max-chars 12000

输出字段:

  • url:原始 URL
  • final_url:最终跳转后 URL
  • status_code:HTTP 状态码
  • title:标题
  • description:描述
  • author:作者
  • account_nickname:账号昵称
  • published_time:发布时间
  • method:使用的方法
  • text:正文文本
  • content_html:正文原始 HTML
  • excerpt:摘要
  • notes:附加说明
  • access_limited:是否受限
  • access_limit_reason:受限原因

scripts/fetch_page.py

用途:

  • 确定性首次提取
  • 优化成本、速度和可移植性

典型用法:

python3 scripts/fetch_page.py "https://example.com/article" --format json --max-chars 8000

输出字段:

  • url
  • final_url
  • status_code
  • title
  • description
  • author
  • published_time
  • method
  • text
  • excerpt
  • notes

scripts/render_page.py

用途:

  • 针对 JavaScript 重度或客户端渲染页面的浏览器渲染回退方案

典型用法:

python3 scripts/render_page.py "https://example.com/article" --format json --wait-ms 2500

重要注意事项:

  • 浏览器回退需要 Node Playwright 支持
  • 浏览器回退需要通过 Playwright 安装 Chromium
  • 使用浏览器回退时,需要系统共享库以支持无头 Chromium
  • 当不可用或出现故障时,返回明确的机器可读失败状态

参考资料

在需要比主工作流更深入的上下文时,请阅读以下内容:

  • references/strategy.md

- 默认提取策略

- 失败后到下一动作的映射关系

  • references/browser-runtime.md

- 浏览器回退运行时预期

- 常见失败模式

- 操作指导

安全约束

  • 优先使用轻量级获取,而非浏览器自动化。
  • 不应为每一页都静默切换到昂贵的浏览器渲染。
  • 当访问被阻止时,不应伪装成功。
  • 对于常规读取,除非用户明确要求导出或归档,否则不要将页面内容保存到磁盘。
  • 如果必须保存输出,应优先使用调用方指定的报告/输出路径,而非工作区根目录下的产物。

快速示例

示例 A:微信公众号文章

如果 URL 为 mp.weixin.qq.com,请先尝试 fetch_wechat_article.py。若返回文章正文文本,则直接使用该结果。若报告访问限制,请明确说明。

示例 B:标准新闻文章

如果 fetch_page.py 通过 embedded-data:__NEXT_DATA__dom-paragraphs 返回完整正文内容,直接使用该结果。

示例 C:JS 渲染的文档网站

如果 fetch_page.py 仅返回少量文本或元数据,应升级至 render_page.py

示例 D:被屏蔽的页面

如果因登录、验证码或反机器人机制导致浏览器渲染失败,应明确报告限制情况,并在适当情况下寻找其他可访问来源。

Y
@ylkangpeter

已收录 1 个 Skill

相关推荐