如何使用Wget下载单网页及全部CSS/JS/图片等关联资源(含CDN资源)
可行解决方案
你之前使用的wget命令缺少跨域下载参数,且原版wget不支持并行下载、自定义资源存放路径,因此无法达到预期效果,可采用以下两种方案实现需求:
方案1:使用wget2(推荐,原生支持并行和自定义目录结构)
wget2是wget的官方升级版本,内置并行下载能力,支持直接指定各类资源的存放路径,完全匹配你需要的目录结构:
- 先安装wget2
- Debian/Ubuntu 系:
apt install wget2 - CentOS/RHEL 系:
dnf install wget2 - macOS:
brew install wget2
- Debian/Ubuntu 系:
- 执行下载命令
wget2 --page-requisites --convert-links --adjust-extension \ --directory-prefix=FOLDER \ --asset-directory=assets_folder \ --css-directory=assets_folder \ --js-directory=assets_folder \ --image-directory=assets_folder/IMAGES_FOLDER_WITH_ALL_NEEDED_IMAGES \ --max-parallel=16 \ --span-hosts \ http://example.com
参数说明:
--page-requisites:下载页面所有依赖的CSS、JS、图片等资源--convert-links:自动转换页面内的资源路径为本地相对路径,保证离线可正常访问--directory-prefix:指定下载内容的根目录为你需要的FOLDER- 各类
--xxx-directory参数:分别指定不同类型资源的存放路径,直接匹配要求的目录结构 --max-parallel=16:最多同时开启16个下载任务,大幅提升下载速度--span-hosts:允许跨域下载CDN上的关联资源
执行完成后直接得到你要求的目录结构,无需额外调整。
方案2:原版wget配合脚本整理(无法安装wget2时使用)
如果环境限制只能使用原版wget,可以先下载所有资源,再通过简单脚本整理目录和修改路径:
- 执行下载命令获取所有资源
wget -k -p -H --adjust-extension --directory-prefix=FOLDER http://example.com
新增的-H参数允许跨域下载CDN资源。
2. 执行整理脚本(在FOLDER同级目录下运行)
#!/bin/bash # 创建目标目录结构 mkdir -p FOLDER/assets_folder FOLDER/assets_folder/IMAGES_FOLDER_WITH_ALL_NEEDED_IMAGES # 移动所有CSS、JS文件到assets_folder find FOLDER -type f \( -name "*.css" -o -name "*.js" \) -exec mv {} FOLDER/assets_folder/ \; # 移动所有图片文件到图片子目录 find FOLDER -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.gif" -o -iname "*.webp" -o -iname "*.svg" \) -exec mv {} FOLDER/assets_folder/IMAGES_FOLDER_WITH_ALL_NEEDED_IMAGES/ \; # 替换index.html内的JS、CSS资源路径 sed -i -E 's/(src|href)="[^"]*\/([^\/"]+\.(js|css))"/\1="assets_folder\/\2"/g' FOLDER/*.html # 替换index.html内的图片资源路径 sed -i -E 's/(src|href)="[^"]*\/([^\/"]+\.(png|jpg|jpeg|gif|webp|svg))"/\1="assets_folder\/IMAGES_FOLDER_WITH_ALL_NEEDED_IMAGES\/\2"/g' FOLDER/*.html
可选适配参数
如果目标站点有反爬限制,可在下载命令中添加以下参数:
- 模拟浏览器UA:
--user-agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36" - 跳过证书校验(仅对信任站点使用):
--no-check-certificate
内容的提问来源于stack exchange,提问作者JohnBowls
相关产品推荐
相关产品推荐

