使用wget排除指定域名与文件类型失败的技术求助
解决wget从URL列表中排除特定域名文件和HTML文件的问题
我明白你遇到的问题了——wget的--exclude-domains和--reject参数看起来没生效,其实是因为这些参数只针对递归爬取(比如用-r参数时)的链接过滤,而当你直接通过-i指定要下载的URL列表时,wget会默认下载列表里的每一个URL,不会用这些参数去过滤列表里的条目。
正确的解决方案:预处理URL列表
最可靠的方式是先过滤掉file.txt里不需要的URL,再用wget下载处理后的列表。你可以用grep命令来完成过滤:
# 过滤掉目标域名的图片和所有HTML相关URL grep -vE '^https?://img2\.rtve\.es/.*\.(jpg|png|gif)$|^https?://.*\.html$|^https?://feedly\.com/?$' file.txt > filtered_file.txt
然后用处理后的列表下载:
wget -i filtered_file.txt
解释这个过滤命令
grep -vE表示反向匹配(排除符合正则的行),正则部分分三个核心规则:
^https?://img2\.rtve\.es/.*\.(jpg|png|gif)$:排除img2.rtve.es域名下所有以jpg/png/gif结尾的URL^https?://.*\.html$:排除所有以.html结尾的URL^https?://feedly\.com/?$:排除feedly.com的根URL(因为它会被自动下载为index.html)
为什么之前的命令无效?
再帮你理清楚之前的误区:
--exclude-domains:这个参数是用来在递归爬取时,禁止wget去爬取指定域名下的后续链接,但不会过滤你直接在列表里指定的URL--reject:同样是针对递归爬取过程中发现的文件,不会对你直接指定的URL条目生效
这样处理后,你就能精准下载符合需求的文件了。
内容的提问来源于stack exchange,提问作者tomillo
相关产品推荐
相关产品推荐

