☰
整站下载成 ZIP 包:Website-downloader 上手到出包流程
2026/9/28 6:29:08 网站建设 项目流程

整站下载成 ZIP 包:Website-downloader 上手到出包流程

【免费下载链接】Website-downloader💡 Download the complete source code of any website (including all assets). [ Javascripts, Stylesheets, Images ] using Node.js项目地址: https://gitcode.com/GitHub_Trending/we/Website-downloader

一个教程站马上要下线,你手头又缺它的源码和资源,想把它完整存到本地——手动就得逐页右键"另存为",几十上百个页面点到你怀疑人生。Website-downloader 就是干这件事的:在浏览器页面里填一个网址,它把整站抓下来,最后推给你一个 zip 包。

它帮你做什么

一句话:递归下载目标网站,压缩成一个 zip,再直接推送到你的浏览器。

页面、样式、脚本、图片都会被抓下来,HTML 里的链接同时被改写成相对路径,解压后双击 index.html 就能离线打开,不依赖网络。整个过程你不用记任何命令行参数。

谁会用得上?比较典型的两种情况:你写技术文章引用了某个网站,怕它哪天改版把内容搞丢,想存一份完整快照;或者你要把某个站点拉到飞机上离线看。只要需求是"把整个网站变成本地文件",它就是干这个的。

跑起来

开始前确认两件事:机器上装好了 Node.js(自带 npm);系统里有 wget 命令。Linux 和 macOS 一般自带,Windows 需要单独装。4 步就能跑:

  1. 克隆代码到工作目录:
git clone https://gitcode.com/GitHub_Trending/we/Website-downloader cd Website-downloader
  1. 安装依赖:
npm install
  1. 启动服务,监听 3000 端口:
npm start
  1. 浏览器打开http://localhost:3000,把目标网站的完整 URL(带 http/https 前缀)填进输入框,点下载按钮。

接下来就是等。页面中间的日志区会滚动打印 wget 的实时输出,上方的计数器每看到一行 "200 OK" 就加 1,也就是告诉你已经落盘多少个文件。看到 "Compressing completed successfully" 后,底部会出现绿色的 "Download website assets" 按钮,点一下浏览器就开始保存 zip。几十页的小站通常 1~2 分钟出包,大站就是等得更久,中途不用做任何操作。

它是怎么工作的

你点下载时,页面并不是发一个普通的 HTTP 请求,而是通过 Socket.io 连接带着一个随机 token 把请求发过去。服务器随即调系统 wget 递归抓取网站的页面、样式和图片,并把页面里的链接改写成相对路径;wget 的进度实时推回页面当日志,抓完后 archiver 用最高压缩级别把整个下载文件夹打成 zip 写进public/sites/。页面最后那个下载按钮,本质就是跳过去拿这个静态文件。真正执行的是一条命令,换成你的网址即可:

wget -mkEpnp --no-if-modified-since https://example.com

m 是递归下载,k 把链接改写成相对路径,E 按内容类型补扩展名,p 抓取页面需要的样式和图片,n 表示递归时不爬到父目录。

连接入口和请求分发在 socket/socket.js,抓取和压缩的完整逻辑分别写在 wget/index.js 和 archiver/index.js,想改下载行为就从这个顺序看起。

常见卡点与处理

wget 没装。现象:点下载后日志只报错、文件计数不动。原因:抓取逻辑靠调用系统里的 wget,它不随 Node.js 一起提供。处理:先装上它,Ubuntu/Debian 用sudo apt install wget,macOS 用brew install wget。

同一网站重复下载会覆盖旧包。现象:上周存的那份 zip 找不到了。原因:输出路径固定为public/sites/域名.zip,再下一次同名文件直接覆盖。处理:下载完成后立刻把 zip 挪走,或者重新下载前先手动移走旧文件。

需要登录的页面抓不全。现象:同样的页面,本地版比线上少一块内容。原因:wget 只发裸请求,不带 cookie 和登录态,只能拿到公开内容。处理:私有内容目前不在这个工具的能力范围内,得用浏览器开发者工具手动导出。

接下来

回到开头的场景:教程站要下线时,你现在只需要贴一个 URL,等约 1 分钟,把 zip 存走。想调整抓取范围或压缩逻辑的话,入口就是仓库里的 wget/index.js 和 archiver/index.js 这两个文件。

【免费下载链接】Website-downloader💡 Download the complete source code of any website (including all assets). [ Javascripts, Stylesheets, Images ] using Node.js项目地址: https://gitcode.com/GitHub_Trending/we/Website-downloader

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询