wget -r 默认会无差别下载所有超链接资源,包括跨域cdn、第三方js和广告;因其递归模式解析html中所有a/img/script标签url,不区分路径类型、不检查robots.txt、可能因重定向跳转至无关域名。

wget -r 默认会无差别下载所有超链接资源,包括跨域 CDN、第三方 JS 和广告——别直接上 -r。
为什么 wget -r 会下错东西
递归模式本质是「解析 HTML 中所有 a、img、script 标签里的 URL 并尝试下载」。问题不在功能弱,而在太“老实”:
- 不区分相对路径和绝对路径:
href="https://cdn.example.com/logo.png"也会被拉取 - 默认不检查
robots.txt(除非加-m或显式--user-agent) - 遇到 302 重定向可能跳到完全无关域名,比如从
example.com跳到tracking.net
wget -m 是更安全的起点,但必须加护栏
-m(mirror)不是一键镜像开关,它等价于 -r -N -l inf --no-remove-listing,只解决了一半问题。真正起作用的是后面这三道强制护栏:
-
--domains=example.com:只允许下载该域名及子域名(支持逗号分隔,如--domains=example.com,cdn.example.com) -
--no-parent(简写-np):禁止向上翻目录,避免从/blog/爬到根路径甚至跨站 -
--convert-links(简写-k)+--page-requisites(简写-p):确保 HTML 能本地打开——-p下 CSS/图片/字体,-k把所有远程路径转为相对路径
典型可用命令:wget -m -np -k -p -D example.com -R "*.php,*.cgi" https://example.com/
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
只下 HTML + 静态资源,不要 JS 执行结果
很多场景只要离线可浏览的静态快照,不关心 JS 渲染逻辑或 API 返回内容。这时 -p -k -nd 比 -r 更精准:
-
-p只抓当前页面引用的资源(CSS、图片、WebP、SVG 字体),不会递归进这些资源内部的链接 -
-k必须跟上,否则本地双击 HTML 时所有src和href仍是远程地址 -
--no-host-directories(简写-nd)把所有文件平铺到当前目录,避免生成example.com/子目录
示例:wget -p -k -nd https://example.com/about.html
最容易被忽略的两个坑
一是 robots.txt:即使加了 -m,如果目标站 robots.txt 把 / 拒绝了,wget 会直接退出——调试时可用 --ignore-robots,但生产环境慎用;
二是时间戳同步:-N 依赖服务器返回 Last-Modified 头,而大多数 CDN、S3 静态站根本不发这个头,导致每次重跑都重复下载。这种情况下,--timestamping(基于本地文件 mtime 判断)反而比 -N 更可靠。










