HackerNews Extract

🦞 HN 内容一键萃取,原文评论全收录

Content Extraction榜 #1

一键提取 HackerNews 文章与完整评论树为结构化 Markdown,便于快速阅读或喂给 LLM 分析

收藏
13.1k
安装
2.8k
版本
0.1.2
CLS 安全性认证2026-06-24
点击查看完整报告 >

使用说明

核心用法

hn-extract 是一款基于 Python 的 HackerNews 内容提取工具,通过 uv 脚本运行,无需复杂安装。它接受 HackerNews ID、URL 或本地 Algolia JSON 文件作为输入,自动抓取原始文章内容(使用 trafilatura 清理 HTML)并通过 HN Algolia API 获取帖子元数据与完整评论树,最终输出为单一结构化的 Markdown 文件。

显著优点

  • 零依赖预装:仅需 uv 即可运行,依赖自动隔离安装
  • 内容完整性:同时获取原文与评论,保留讨论上下文
  • 结构化输出:评论按线程深度缩进,便于追踪对话脉络
  • LLM 友好:清洗后的 Markdown 格式适合直接输入大模型进行摘要或分析
  • 容错设计:HTTP 请求带重试机制,SSL 处理宽松以提升可用性

潜在局限

  • 抓取限制:需要登录验证或明确屏蔽爬虫的网站可能提取失败
  • 内容质量依赖源站trafilatura 对复杂排版或动态渲染页面的提取效果不稳定
  • 无增量更新:单次提取,不支持追踪后续新增评论

适合人群

HN 重度读者、研究员、需要批量归档技术讨论内容的开发者,以及希望将社区讨论喂给 LLM 进行分析的内容策展者。

常规风险

  • 高频请求可能触发 HN 或目标站点的速率限制
  • 自动 SSL 宽松处理可能在极端场景下引入中间人风险
  • 提取内容可能包含未经验证的链接,后续点击需谨慎

安全解读

核心用法

hn-extract 是一个轻量级 Python 工具,专用于将 HackerNews 的任意帖子(含原文与评论树)抓取并格式化为单一 Markdown 文件。它接受三种输入:纯数字 ID、完整 HN URL,或本地保存的 Algolia JSON 文件。运行命令为 uv run --script hn-extract.py <input> -o output.md,依赖 uv 自动管理虚拟环境与依赖。

工作流程分为三步:首先调用 Algolia API 获取帖子元数据与评论树;其次使用 trafilatura 抓取并清洗原文 HTML,提取正文内容;最后将标题、链接、作者、原文及层级缩进的评论整合为易读的 Markdown。输出文件可直接阅读,也可作为 LLM 上下文输入进行摘要或分析。

显著优点

1. 零配置体验:仅需安装 uv,无需手动创建环境或管理依赖,脚本首次运行自动安装所需库。
2. 内容清洗能力trafilatura 有效去除广告、导航栏等噪声,保留文章正文,输出质量优于简单 HTML-to-Markdown 转换。

3. 评论层级保留:评论按 HN 的线程深度缩进,便于理解讨论脉络。

4. LLM 友好:单文件输出、标准 Markdown 格式,天然适合作为大模型上下文,避免多段复制粘贴。

5. 重试与容错:内置 HTTP 重试机制,对网络波动更鲁棒。

潜在缺点与局限性

  • SSL 验证风险:为兼容部分证书异常的站点,代码使用 no_ssl=True,存在中间人攻击可能。
  • 无访问控制:可抓取任意用户提供的 URL,存在 SSRF 风险,可能探测内网或访问恶意站点。
  • 内容不可预测:外部站点反爬策略各异,部分网站会返回 403 或需 JS 渲染,抓取可能失败。
  • 无更新机制:评论是静态快照,不随 HN 实时更新。
  • Python 版本依赖:需系统已安装 Python 3 及 uv,对纯新手仍有门槛。

适合人群

  • 需要离线阅读 HN 长文与深度评论的读者
  • 研究者、分析师,需将 HN 讨论批量输入 LLM 进行主题提取或情感分析
  • 希望构建个人知识库,将 HN 内容归档为 Markdown 的开发者

常规风险

  • 网络安全:禁用 SSL 验证虽提升兼容性,但在公共网络或不信任环境下运行有被劫持风险。
  • 隐私泄露:抓取行为会向外暴露用户 IP 及阅读兴趣,且目标站点可能记录访问日志。
  • 法律合规:自动抓取需遵守目标网站的 robots.txt 及服务条款,商业用途需注意版权。
  • 依赖维护trafilatura 等库更新可能引入 Breaking Change,建议锁定版本。

HackerNews Extract 内容

手动下载zip · 3.8 kB
hn-extract.pytext/plain
请选择文件