← 返回信息流
GitHub 热榜GitHub Trending · 日·1 小时前

Website-downloader:基于Node.js的网站完整源代码下载工具

原标题:AhmadIbrahiim/Website-downloader
HTML3,805 stars+173 今日

速览

该工具使用Node.js爬取整个网站并保留原始目录结构,能够下载所有关联资源(JS、样式表、图片等),适用于离线备份、网页结构分析、站点迁移等场景。支持自定义下载深度和并发控制,操作简单高效。

AI 深度解读

这是什么

AhmadIbrahiim/Website-downloader 是一个基于 Node.js 的开源工具,能够一键下载任意网站的完整源代码(包括所有静态资源,如 CSS、JS、图片、字体等),并将它们打包压缩后通过 WebSocket 实时返回给用户。项目提供了在线演示(Live Demo)和自部署方案,底层依赖 wget 的镜像功能与 archiver 的压缩能力,核心逻辑简洁高效。

解决的问题

在日常开发、设计或离线研究中,经常需要完整保存一个网站的结构以便本地查看、分析或备份。直接使用浏览器“另存为”往往只能保存当前页面,无法递归获取子页面、缺失 CSS 中引用的字体、图片等资源,而且链接仍指向线上地址,导致离线环境无法正常浏览。Website-downloader 利用 wget 的镜像参数,一次性解决递归下载、链接转换、资源补全和文件扩展名规范化等问题,再通过 WebSocket 实时推送压缩包,让用户无需手动操作命令行即可获得完整的离线站点。

核心功能

  • 一键镜像下载:输入任意 URL,自动执行 wget --mirror --convert-links --adjust-extension --page-requisites --no-parent,下载整个站点的递归结构。
  • 资源完整性--page-requisites 确保 CSS、图片、JS 等页面渲染必需的资源全部被下载。
  • 链接本地化--convert-links 将所有内部链接(包括 <a><img><link> 等)转换为相对路径,离线打开 HTML 时样式和导航均正常。
  • 文件扩展名规范化--adjust-extension 根据 Content-Type 自动为 HTML 和 CSS 文件添加 .html.css 后缀,避免因无扩展名导致浏览器无法识别。
  • 实时压缩与推送:下载完成后,archiver 将整个目录打包为 .zip 文件,并通过 WebSocket 通道实时推送给用户,无需等待整个下载过程结束即可看到进度。
  • 在线演示与自部署:提供可用的 Live Demo(https://website-downloader.onrender.com),也支持通过 git clone + npm install + npm start 在本地或云平台(如 Render、Heroku)私有部署。

亮点 / 与同类相比

  • 极简部署:仅需 Node.js 和 wget(Linux/Mac 自带,Windows 需额外安装),没有复杂的数据库、队列或外部依赖。相比 wget 命令行,该项目提供了 Web 界面和实时进度反馈,降低了使用门槛。
  • 实时反馈:通过 WebSocket 通道传输压缩包,用户可以在下载过程中看到进度,而非等待全部完成才收到文件。相比传统 wget 命令行的静默执行,体验更友好。
  • 结构清晰:代码量小(主语言为 HTML,实际 Node.js 后端逻辑简洁),适合学习或二次开发,例如修改 wget 参数、增加认证、支持自定义域名等。
  • 与同类工具对比:许多在线网站下载器(如 HTTrack)需要安装桌面客户端或依赖浏览器插件,而本项目可直接部署在云端,通过 URL 输入即可使用,无需本地安装任何软件。与 wgetcurl 相比,它提供了图形化界面和打包下载功能。

适合谁用 / 上手

适合人群

  • 前端开发者:需要快速获取竞争对手或参考站点的静态资源进行分析。
  • 设计师:需要保存完整页面设计(含字体、图标)用于离线评审。
  • 内容创作者:希望备份自己的网站或博客,保留所有页面和附件。
  • 学习 wget 参数的用户:通过项目源码理解 --mirror--convert-links 等参数的实际效果。

上手步骤

  1. 在线体验:直接访问 Live Demo 链接,输入目标网站 URL,点击下载即可获得压缩包。
  2. 自部署:git clone 项目 → cd Website-downloadernpm installnpm start,访问 http://localhost:3000 使用。
  3. 注意:目标网站需允许被爬取(robots.txt 限制可能影响下载),且大型网站可能会消耗较多时间与带宽,建议先测试小站点。
查看原文 →github.com