工具推荐·阅读约 2 分钟·
Kage:把任意网站「影」到本地,生成离线单二进制的神奇工具

Kage:把任意网站「影」到本地,生成离线单二进制的神奇工具

Kage 是一个 Go 语言编写的开源工具,能将任意网站渲染、剥离 JavaScript 并通过 headless Chrome 快照后保存到本地。它支持导出为 ZIM 归档、自包含二进制乃至双击可执行的原生应用,甚至支持跨平台编译。634 个 HN 点赞证明了它的实。

2026 年 6 月中旬,一个名为 Kage 的开源工具登上了 Hacker News 首页,获得了 634 个点赞和热烈讨论。名字"Kage"是日语"影"的发音——寓意它像影子一样捕捉网站。它的功能听起来简单但执行极其精妙:把任意网站克隆到本地,剥离所有 JavaScript,生成一个可离线浏览的静态镜像,甚至可以打包成一个单文件的可执行程序。

不是简单的 wget

你可能觉得"下载网站"不是什么新鲜事,wget 的 --mirror 参数几十年前就能做这个。但 Kage 的核心差异在于它的工作方式:它不下载 HTML 源码,而是驱动一个真实的 headless Chrome 浏览器渲染页面

这意味着什么?它捕获的是 JavaScript 执行之后的最终 DOM 状态——那些依赖 AJAX 动态加载的数据、懒加载的图片、CSS 生成的样式、Web 字体,所有东西都在页面渲染完成的那一刻被序列化保存。传统 wget 对现代 Web 应用几乎没有用处,因为大部分内容根本不在初始 HTML 中。

Kage 的工作流程:

code
种子 URL → headless Chrome 渲染 → DOM 快照 → 剥离 JS → 本地化资源 → 保存到磁盘

—— 广告 ——

安装与快速上手

Kage 用 Go 编写,安装非常简便:

code
# Go 安装
go install github.com/tamnd/kage/cmd/kage@latest
 
# 或者用 Docker(内置 Chromium)
docker run --rm -v "$PWD/out:/out" ghcr.io/tamnd/kage clone paulgraham.com

Debian/RPM/APK 包也都提供在 releases 页面上,Linux 用户可以直接用包管理器安装。

核心命令只有四个:

code
# 1. 克隆网站(最简单的用法)
kage clone paulgraham.com
 
# 2. 在本地起一个 HTTP 服务器浏览克隆内容
kage serve ~/data/kage/paulgraham.com
 
# 3. 打包为单个 ZIM 文件
kage pack paulgraham.com
 
# 4. 或者打包为自包含的可执行文件
kage pack paulgraham.com --format binary -o paulgraham
./paulgraham   # 直接运行就是一个离线网站服务器

三种打包格式

Kage 最令人印象深刻的是它的打包能力——不只是保存文件,而是把整个网站做成便于分发和使用的格式。

1. ZIM 归档(默认格式)

ZIM 是一种开放的文件格式,被 Kiwix 等离线阅读器广泛使用。Kage 生成的 ZIM 文件是确定性的——对于相同的镜像内容,输出字节完全相同,UUID 由内容推导生成,适合用来做内容分发和长期存档。

2. 自包含二进制

这是最炫酷的模式:kage pack --format binary 将整个网站的 HTML、CSS、图片、字体全部嵌入一个 Go 可执行文件中。运行这个二进制文件,它就在 8800 端口上启动 HTTP 服务器提供服务。由于是 Go 编译的静态二进制,它没有任何运行时依赖。

更厉害的是,你可以在 Linux 上交叉编译出 Windows 版本的离线网站:

code
kage pack paulgraham.com --format binary --base kage-windows-amd64.exe -o paulgraham.exe

生成的 .exe 文件在没有安装任何软件的 Windows 机器上也能直接运行。

3. 双击应用

code
# macOS
kage pack paulgraham.com --app              # → paulgraham.app
 
# Linux (需要 appimagetool)
kage pack paulgraham.com --app --base kage-linux-amd64   # → .AppDir + .AppImage

包装成原生的平台应用格式,图标自动从网站的 favicon 提取。

深度功能

除了基本的离线镜像,Kage 还有一些值得注意的细节:

  • 礼貌爬取:读取 robots.txt,并从 sitemap.xml 获取种子 URL
  • 可恢复:Ctrl-C 保存状态,重新运行从断点继续,不必从头开始
  • 幂等性:相同页面的不同 URL(http/https、有无尾部斜杠)只获取一次
  • 精确路径映射:每个 URL 映射到唯一的本地文件路径,不会出现命名冲突
  • 触发懒加载--scroll 参数自动滚动页面,激活图片懒加载
  • 排除路径--exclude 跳过不希望下载的路径
  • 并发控制--workers 调节渲染并发度(默认 4 个)

它还支持 --scope-prefix 只下载特定路径下的内容,--subdomains 包含子域名。

什么场景适合用 Kage?

Kage 最突出的价值场景包括:

  1. 知识存档:将优秀的个人博客、技术文档在本地存档,避免原站下线后无法访问
  2. 演示与培训:用自包含二进制包将完整网站演示环境分发到没有网络的机器上
  3. 隐私浏览:剥离所有 JS 的版本让你可以安心阅读内容,无需担心跟踪脚本
  4. 内容审核与对比:离线版本可以作为网站某个时间点的"快照"供后续对比
  5. 旅行/飞机上阅读:打包成手机可读的 ZIM,在 Kiwix 中离线阅读

局限与注意事项

Kage 不是一个"网站全部功能"的副本——它刻意移除了所有 JavaScript,所以任何 JS 驱动的交互功能(评论区、搜索、登录表单、动态数据加载)都不会工作。它的定位是静态内容阅读工具,而不是完整站点备份方案。

另外,大规模爬取时需要注意 robots.txt 限制和服务器负载,最好先设定 --max-pages 限制数量,避免对目标站点造成压力。

总评

Kage 在"下载网站"这个已经有无数解决方案的领域里,找到了一个精巧且实用的切入点。headless Chrome 渲染后剥离 JS 的方式让它能够处理现代 Web 应用中的动态内容;而打包成自包含二进制文件的能力则是锦上添花——一个 15MB 左右的可执行文件就能完整提供一个网站的阅读体验,这在访谈、教育、存档等场景中有着极高的实用价值。

对于经常需要保存网页内容做离线研究或知识管理的开发者,Kage 值得放入工具箱。

原文来源:GitHub - tamnd/kage — Kage 是一个 Go 编写的开源工具,能通过 headless Chrome 渲染任意网站、剥离 JavaScript 并打包为离线可浏览的静态镜像或单文件二进制。

分享到
微博Twitter

© 2026 四月 · CC BY-NC-SA 4.0

原文链接:https://aprilzz.com/tools/kage-offline-browser