真正能落地的方案只有两类:命令行递归抓取(适合静态站)或用node.js工具整站下载(支持动态资源与路径重写);wget需加--recursive、--page-requisites、--convert-links等参数才可完整抓取静态资源,而vue/react等js渲染页面必须用puppeteer或website-downloader等支持执行js的工具。

直接用浏览器“另存为”或右键“查看源代码”保存,对大型网站基本无效——CSS 404、JS 报错、图片裂开、链接全失效。真正能落地的方案只有两类:命令行递归抓取(适合静态站),或用 Node.js 工具整站下载(支持动态资源与路径重写)。
curl / wget 只能下首页?加这 3 个参数才够用
单条 curl https://example.com > page.html 或 wget -O page.html https://example.com 确实只拿回一个 HTML 文件,所有 href 和 src 引用的外部资源全丢。要完整抓取,必须启用递归与依赖下载:
-
--recursive(-r):开启递归,但默认只抓同域;跨 CDN 资源需配合--span-hosts --domains=example.com,cdn.example.net -
--page-requisites(-p):强制下载 CSS、JS、图片等页面必需资源 -
--convert-links(-k):把绝对 URL(如https://example.com/style.css)转成相对路径(style.css),否则本地双击打开时全部 404
完整命令示例:wget --recursive --no-clobber --page-requisites --html-extension --convert-links --restrict-file-names=windows --span-hosts --domains=example.com,cdn.example.net https://example.com。注意:目标文件夹需提前存在,且 wget 在 Windows 上建议用 Git Bash 或 WSL 运行,原生 CMD 支持有限。
遇到 Vue/React 页面,wget 抓不到真实内容?换 Puppeteer 或 Website-downloader
像官网、后台系统这类用前端框架渲染的站点,服务端返回的 HTML 往往只有 <div id="app"></div>,真实 DOM 是 JS 运行后插入的。wget 和 curl 拿不到这部分,属于设计限制,不是配置问题。
-
Puppeteer可启动 Chromium 实例,等待 JS 执行完成再保存page.content(),适合单页或少量页面,但部署成本高、内存占用大 -
Website-downloader(基于 Node.js +wget封装)更轻量:它先用fetch获取首屏 HTML,再解析并递归下载所有资源,同时自动修正路径、打包 ZIP。对含fetch加载数据的页面,需等其加载完成再点下载按钮——界面上有实时日志可观察进度
运行前确认已安装 node -v 和 wget --version,缺一不可。项目拉下来后 npm install 会自动装好 express、archiver 等依赖,无需手动干预。
保存后本地打不开?90% 是 file:// 协议和路径惹的祸
双击生成的 index.html 打不开,不是工具没用好,而是浏览器安全策略卡住了:
-
file://协议下,现代浏览器默认禁用跨文件读取(比如从index.html加载同目录下的style.css),会报CORS错误——必须用本地服务器打开,例如npx http-server或 VS Code 的 Live Server 插件 - 即使用了
--convert-links,某些内联<script src="/js/app.js"></script>中的前导斜杠仍会指向根目录,导致 404;需手动替换为./js/app.js或确保整个文件夹结构被完整保留 - 部分网站启用了
Service Worker,离线时可能拦截请求并返回缓存白屏,下载后应检查并删掉sw.js或注释掉注册代码
最省事验证方式:用 Chrome 访问 http://localhost:8080(而非 file:///xxx/index.html),看是否样式正常、图片加载、控制台无 404。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











