最简命令为:wget -o page.html https://example.com,它直接获取服务器返回的原始html响应体,不执行js、不渲染,适合存档或调试;若页面依赖js渲染,内容可能不完整。

用 wget 保存单个网页的原始 HTML 源码
直接请求服务器返回的原始 HTML,不执行 JS、不渲染,适合存档或调试服务端输出。
最简命令就是:wget -O page.html https://example.com。它把响应体原样写入文件,不带任何额外资源。
- 如果目标页有查询参数(如
?id=123),wget会自动编码并保留,无需手动处理 - 注意:该命令获取的是服务器直出的 HTML,若页面依赖 JS 渲染(如 React/Vue SSR 未开启),内容可能为空或不完整
- 若遇到重定向(301/302),默认会跟随;加
--max-redirect=0可禁用,用于检测跳转逻辑 - 中文 URL 或含特殊字符时,建议加
--restrict-file-names=windows避免生成非法文件名
用 wget 下载整站并分离 HTML/CSS/JS 资源
要本地可编辑、能进 Git、支持后续定制,就不能靠浏览器“另存为”,得让每个资源保持独立文件和原始路径。
推荐组合参数:wget --recursive --page-requisites --no-parent --convert-links --restrict-file-names=windows https://example.com/
使用 Puppeteer + Chrome 将 HTML 渲染为中文 PDF,自动处理图表等待、Tab 展开、动画、测高、白边消除、防分页,适用于看板、报表、网页和交互图表转 PDF。
-
--recursive控制爬取深度,默认只下一级;加-l 3可设最大层数 -
--page-requisites是关键:下载所有<link>、<script></script>、<img>引用的资源,并按原始相对路径存放 -
--convert-links会重写 HTML 中的链接,把远程地址转成本地相对路径,确保离线打开正常 - 若目标站有大量无关子目录(比如 /blog/ /admin/),用
--exclude-directories=/admin,/cgi-bin排除
wget 抓 PHP 页面时实际保存的是什么?
很多人误以为 wget https://site.com/page.php 会保存 PHP 源码——不会。它请求的是 HTTP 响应体,也就是 PHP 执行完后吐出的 HTML。
也就是说:wget 拿到的是结果,不是源码。你永远得不到 .php 文件本身,除非服务器配置错误,把 PHP 当纯文本返回(此时响应头是 Content-Type: text/plain)。
- 验证方式:用
curl -I https://site.com/page.php看响应头中的Content-Type - 如果看到
text/html,说明你拿到的是渲染后的页面;如果是text/plain或application/octet-stream,才可能暴露源码(属严重安全风险) - 想批量抓多个 PHP 地址?把 URL 列进
urls.txt,然后运行:wget -i urls.txt -P ./output
容易被忽略的坑:路径、编码与反爬
wget 默认行为在某些场景下会静默失败,且错误信息不明显。
- 资源路径错乱:若原站用绝对路径(如
/css/style.css),--convert-links可能无法正确重写,需配合--base=http://example.com显式指定根 - 文件编码问题:HTML 响应头若声明
charset=gb2312,但本地编辑器默认 UTF-8,打开会乱码;可用iconv转换,或加--restrict-file-names=nocontrol保留原始字节 - 被封 IP 或限速:部分站点通过
User-Agent或请求频率识别爬虫;加--user-agent="Mozilla/5.0"和--random-wait可缓解 -
--no-clobber建议始终加上,避免重复下载覆盖已有文件,尤其跑定时任务时
真正麻烦的不是命令写不对,而是没意识到 wget 拿到的永远是“运行结果”——它不理解 PHP、不执行 JS、也不绕过登录态。需要动态内容时,得换 Puppeteer 或 Playwright。
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!










