如何使用wget检测网页包含指定内容并提取对应URL
筛选包含指定内容的页面URL实现方案
你当前使用的--spider参数仅会让wget做链接存活性检查,不会下载页面HTML内容,因此无法直接基于内容筛选URL,可按以下两种方案实现需求:
方案1:先本地缓存全站页面再筛选(推荐,适合站点规模较大的场景)
步骤1:递归下载全站HTML页面并导出所有URL
# 替换示例中的site.com为目标站点域名,HTTPS站点自行修改前缀 wget --mirror --accept html,htm --directory-prefix=./site_cache http://site.com 2>&1 | grep -oe 'http[^ ]*' | sort | uniq > all_urls.txt
参数说明:
--mirror:镜像模式,自动适配递归深度、保留站点目录结构、避免重复下载--accept html,htm:仅下载HTML页面,过滤图片、样式、脚本等非必要资源--directory-prefix=./site_cache:所有下载内容存储到当前目录的site_cache文件夹内- 最终输出的
all_urls.txt为全站可用URL列表,和你原有命令输出效果一致
步骤2:按内容筛选对应URL
匹配固定文本
替换命令中的目标文本为你要查找的内容:
grep -rl "目标文本" ./site_cache/ | while read cache_path; do # 本地缓存路径转原始URL,HTTPS站点自行替换前缀 echo "${cache_path/\.\/site_cache\//http://}" done | sort | uniq > matched_urls.txt
匹配正则模式
添加-E参数启用正则匹配,替换正则规则为你的实际匹配逻辑:
grep -rlE "正则规则" ./site_cache/ | while read cache_path; do echo "${cache_path/\.\/site_cache\//http://}" done | sort | uniq > matched_urls.txt
筛选完成后所有符合要求的URL会存储在matched_urls.txt中。
方案2:逐URL请求检查(适合小规模站点,无需本地缓存)
直接使用你原有命令生成的all_urls.txt逐页请求匹配:
cat all_urls.txt | while read url; do # 匹配正则时给grep添加-E参数即可 curl -s "$url" | grep -q "目标文本/正则" && echo "$url" done > matched_urls.txt
注意:该方案会重复发起HTTP请求,站点规模较大时速度慢,且有触发IP封禁的风险
内容的提问来源于stack exchange,提问作者jack
相关产品推荐
相关产品推荐

