用途
Article Extractor 用于从网页文章、博客文章和教程中提取正文内容。它会去除导航菜单、广告、 newsletter 订阅表单、相关文章侧边栏、评论区、社交媒体按钮、Cookie 提示等页面噪音,保存干净的、可读的文本文件。
主要能力
提取工具优先级
该技能按以下顺序检查并使用可用的工具:
-
reader(推荐,基于 Mozilla Readability)
- 检查命令:
command -v reader - 安装命令:
npm install -g @mozilla/readability-cli或npm install -g reader-cli - 优点:基于 Mozilla 的 Readability 算法,擅长去除冗余内容,保留文章结构。
- 检查命令:
-
trafilatura(基于 Python,效果很好)
- 检查命令:
command -v trafilatura - 安装命令:
pip3 install trafilatura - 优点:提取准确,适应多种网站结构,支持多语言。
- 可用选项:
--no-comments(跳过评论区)、--no-tables(跳过数据表格)、--precision(偏向精确率)、--recall(提取更多内容,可能包含噪音)。
- 检查命令:
-
后备方案(curl + 简易解析)
- 在没有可用工具时使用基本的 curl 加文本提取,可靠性较低但无须依赖。
提取方法示例
方法 1:使用 reader
reader "URL" > article.txt
方法 2:使用 trafilatura
trafilatura --URL "URL" --output-format txt > article.txt
trafilatura --URL "URL" --output-format txt --no-comments --no-tables > article.txt
方法 3:后备方案 使用 curl 抓取页面,再通过 Python 的 HTMLParser 进行基础解析,跳过 script、style、nav、header、footer、aside 等标签,提取 p、article、main、h1-h6 等标签中的文本。该方式依赖较少但准确性较低。
获取文章标题
- reader:输出 markdown,首行为标题(
# 标题)。 - trafilatura:通过
--json输出元数据并解析其中的 title 字段。 - curl 后备:从 HTML 的
<title>标签中提取,并去除站点名称后缀。
文件名处理
提取标题后会清理文件名中的特殊字符(如 /、:、?、"、<、>、|),替换为 - 或删除,并限制长度(通常 80-100 字符以内),最后加上 .txt 扩展名。
完整工作流程
- 检查可用提取工具(reader → trafilatura → 后备方案)。
- 使用最佳可用工具下载并提取文章。
- 清理内容(去除多余空白,合理格式化)。
- 以文章标题作为文件名保存到文件。
- 向用户确认保存位置并展示预览(前 10 行)。
使用方式
当用户提供文章/博客 URL 并要求获取文本内容、下载文章、从 URL 提取内容或将博客文章保存为文本时,该技能被激活。技能会根据环境自动选择提取工具,若主工具失败则尝试备用工具,并始终保持向用户展示预览、验证提取成功后再保存。
适用场景
- 从博客文章、新闻文章、教程中获取干净正文。
- 需要保存文章为可读文本文件供后续阅读或处理。
- reader 适用于大多数新闻网站和博客;trafilatura 适用于学术文章、新闻网站、复杂布局的博客以及非英文内容。
限制
- 付费墙或需登录的文章可能提取失败,此时会提示用户该文章需要认证。
- 大量使用 JavaScript 的网站可能无法提取内容,会尝试后备方法并在失败时告知用户。
- 后备方案可能包含一些噪音,段落识别准确度较低。
- 无效 URL 需要检查格式并尝试处理重定向。
- 标题中的特殊字符需要清理以兼容文件系统。
- 提取质量需通过预览确认,如有问题可尝试不同工具。
错误处理
- 工具未安装:尝试备用工具,并提示安装命令(如
npm install -g reader-cli)。 - 需要付费墙或登录:告知用户无法提取。
- 无效 URL:检查格式,尝试带与不带重定向。
- 无内容提取:站点可能使用大量 JavaScript,尝试后备方法,失败时告知用户。
- 标题含特殊字符:清理文件名。
提取后输出
保存的文件包含:文章标题(如有)、作者(如工具提供)、正文、章节标题;不包含导航、广告或冗余内容。提取后会向用户显示:提取的文章标题、保存文件名、预览(前 10-15 行)、文件大小和位置。