wget --recursive 前须确认服务器允许爬取:检查目录索引、robots.txt 规则及 Apache 隐藏配置;递归下载必加 -r -l 3 -np -nH;配合 --wait、--random-wait 防封IP;用 --restrict-file-names 处理中文乱码。

用 wget --recursive 下目录前,先确认服务器是否允许爬取
很多网站默认禁用目录遍历或 robots.txt 拒绝 wget 的递归行为,直接跑 wget --recursive 会卡在 403、404 或只下到首页就停住。
- 先手动访问目标 URL +
/,看能否列出文件(比如http://example.com/files/);如果返回 403/404/重定向到登录页,wget基本没法递归 - 检查
robots.txt:用浏览器打开http://example.com/robots.txt,找有没有Disallow: /files/这类规则 - 有些站点用 Apache 的
IndexIgnore *隐藏索引,即使路径存在也返回 403 —— 这时wget无解,得换其他方式(如已知文件名列表)
wget -r 必加的四个参数,少一个都容易下不全
默认 wget -r 只下载同域名 HTML 页面,深度 5,不跟进 CSS/JS/图片,也不处理相对链接——几乎等于白跑。
-
-r:开启递归(必须) -
-l 3:设最大递归深度(建议从2或3起手,避免扫整个站) -
-np:不进入父目录(即不跳到上一级路径,防止越界) -
-nH:不创建以主机名命名的子目录(否则所有文件塞进example.com/文件夹) - 额外推荐:
--accept=*.zip,*.pdf,*.tar.gz按后缀过滤,省空间;--no-parent是-np的完整写法,效果一样
遇到 429 Too Many Requests 或被封 IP 怎么办
wget 默认请求极快,几秒内发几十个连接,多数服务器会触发限流或临时封 IP,现象是突然大量 429 或连接超时。
-
--random-wait:在每次请求前加 0.5–1.5 秒随机等待(比固定延时更不易被识别) -
--wait=1:固定间隔 1 秒(保守起见优先用这个) -
-t 3:失败最多重试 3 次(默认是 20 次,容易卡死) - 别加
-c(断点续传)和-r一起用 —— 递归模式下-c不生效,还可能损坏已下文件
下完发现文件名乱码或路径错乱?重点看 --restrict-file-names
中文路径、空格、特殊符号在 Linux 下保存时会被转义或截断,比如 报告 v2.pdf 变成 %E6%8A%A5%E5%91%8A%20v2.pdf,或者生成一堆 index.html.1 冲突文件。
-
--restrict-file-names=windows:强制用 Windows 兼容命名(去掉/ \ : * ? " |,空格变下划线) -
--restrict-file-names=nocontrol:保留原字符,但要求终端和文件系统支持 UTF-8(多数现代 Linux 发行版 OK) - 如果目标页面用的是
meta charset=gb2312,加--local-encoding=GB2312 --remote-encoding=GB2312,否则中文链接根本解析不对
真正麻烦的不是命令写不对,而是没意识到服务器响应头、页面编码、本地 locale、文件系统这四者只要有一个不匹配,文件名就大概率出错。

















