网页存为本地文件时常常遇到尴尬:一些依赖JavaScript动态加载内容的页面,脱机后就只剩残破的排版或空白区域。开源命令行工具kage正是针对这一痛点设计——它让Chrome浏览器实际渲染完整页面后,自动剥除所有JavaScript代码和事件绑定,将整站转成纯静态的HTML,再连同图片等资源一并打包到本地。

kage目前已在GitHub开放源码,支持Windows、macOS与Linux。它的核心流程是先由无头Chrome完成页面渲染,包括那些需要用户交互才会出现的延迟加载图片和异步数据。抓取到的DOM结构会被清理掉所有script标签、onclick等事件句柄,最终得到的是完全脱离外部服务、不发出任何网络请求的静态站点快照。

打开网易新闻 查看精彩图片

这套工具不满足于单页保存,还能自动解析robots.txt和sitemap.xml,按层级递归爬取整个网站。用户只需一行命令,就能指定抓取深度和最大页面数,既可抓取浅层链接,也可限制总量以节省时间。

打开网易新闻 查看精彩图片

除了基本的“clone”命令把网站存为本地文件夹,kage还内置了三个实用能力:第一是ZIM格式打包,这是一种常用于Wikipedia离线分发的开放压缩归档标准,一个文件即可收纳整站内容;第二是桌面应用封装,在Windows下可以生成一个独立的exe文件,双击即可像本地软件一样浏览网站;第三是本地预览服务器,启动后可模拟在线环境,方便检查存放效果或是后续二次处理。

在可靠性方面,爬取过程支持断点续爬,按下Ctrl+C中断后下次运行会自动从进度处继续,避免重复抓取。同时内置增量更新机制,已保存的旧页面会被跳过,仅重新渲染新增或变更的页面。这些设计让定期同步动态站点变得轻量且稳定。

打开网易新闻 查看精彩图片

以Windows下通过Docker执行为例,克隆一个网站比如gigazine.biz只需一条命令:docker run --rm -v "./out:/out" ghcr.io/tamnd/kage clone gigazine.biz --max-pages 50 --max-depth 1 --no-sitemap。执行后会在out目录下生成站点数据,同时输出quick preview指令。启动内建HTTP服务后,在浏览器访问127.0.0.1:8800,就能像在线一样浏览刚才抓取的全部页面及其子链接。整个过程的动静文件均来自本地,无需任何网络连接。

如果想进一步将整站压缩成一个文件,可使用pack子命令生成ZIM归档,再通过open指令直接加载ZIM文件。而打包成exe桌面应用也相当直接:从Release页面下载对应版本的kage.exe作为二进制底座,然后在pack命令中指定格式为binary并指向该exe,即可得到一个自包含的离线阅读程序。项目主站和GitHub仓库均提供详细参数说明和各类平台的使用示例。