wget --mirror 不能直接完整镜像网站,需额外添加 --page-requisites、--convert-links、--restrict-file-names=windows 等参数,并注意 robots.txt、https 证书、重定向、增量更新及动态内容限制。

wget --mirror 参数组合是否真能完整镜像网站
不能直接用 wget --mirror 就完事。它只是快捷开关,背后等价于 -r -N -l inf --no-remove-listing,但缺了关键项:默认不下载 CSS/JS 里的相对链接资源、跳过非 HTML 文件(如 .woff2、.webp)、忽略 robots.txt 禁止规则——这些都会导致镜像页面错乱或空白。
实操建议:
- 必须显式加
--page-requisites下载内嵌资源(CSS、JS、图片) - 加
--convert-links重写链接为本地可访问路径 - 加
--restrict-file-names=windows避免 Linux 文件名含:或?导致保存失败 - 若目标站有 robots.txt 拒绝爬取,需加
--ignore-robots(注意合规性) - 用
-e robots=off是无效写法,正确参数只有--ignore-robots
如何处理 HTTPS 证书错误和重定向循环
遇到 ERROR: cannot verify example.com's certificate 或反复 301/302 跳转,说明 wget 默认校验证书且对重定向深度敏感。
实操建议:
- 加
--no-check-certificate绕过证书验证(仅限测试或内网环境) - 加
--max-redirect=5防止无限跳转卡死(默认是 20,太高易陷入循环) - 加
--user-agent="Mozilla/5.0"避免被识别为爬虫拦截(部分站点会 403 拒绝 wget 默认 UA) - 若提示
Too many redirects,先手动 curl -I 看响应头,确认是否真存在配置错误的跳转链
怎么避免镜像文件体积爆炸和重复下载
默认 --mirror 不做去重,相同资源(如 logo.png?v=2 和 logo.png?v=3)会被当成不同文件全量下载;而且每次运行都从头抓,没增量更新逻辑。
实操建议:
- 加
--no-clobber防止覆盖已存在文件(但不会跳过已下载的 URL) - 加
-N(即 --timestamping)依赖服务端 Last-Modified 头判断是否更新——前提是目标服务器返回该 header - 用
--delete-after边下边删原临时文件,省磁盘空间(慎用,出错可能丢数据) - 首次镜像后,后续更新建议加
--continue+-N,比全量重跑快得多
镜像完成后怎么本地预览不报错
直接双击 index.html 打开常出现跨域、路径 404、CSS 不生效——因为浏览器 file:// 协议禁用 fetch/XHR,且相对路径在本地文件系统解析规则和 HTTP 不同。
实操建议:
- 别用文件浏览器打开,启动最小 HTTP 服务:
python3 -m http.server 8000(Python 3.7+),然后访问http://localhost:8000 - 确保
--convert-links生效:检查生成的 HTML 中 src/href 是否已改为相对路径(如src="js/app.js"而非src="https://site.com/js/app.js") - 如果仍有资源 404,用
wget -r -l1 --no-parent -A "*.css,*.js,*.png" https://example.com/单独补抓遗漏类型
最麻烦的其实是动态渲染内容:wget 只抓静态 HTML,Vue/React 渲染的页面主体根本不会出现在源码里,这种站点用 wget 镜像注定失败,得换 Puppeteer 或 Playwright。











