前言
在日常工作、生活中,需要从网站、文件中提取某类资源的 URL ,并将它们下载到本地。如果手动操作,可能会非常耗时且繁琐,使用 shell 脚本可以轻松地自动化这个过程。
本文将以百度图片网站首页为例,介绍如何用 Shell 脚本从网页中提取图片链接,并下载这些图片到指定的目录中。
Sehll脚本实现
步骤
- 将网页保存为文本文件(例如 image.baidu.mhtml)。
- 编写一个 Shell 脚本(例如 getpic.sh),用 curl命令来下载图片,并将它们保存到以文本文件名命名的目录中(例如 image.baidu_pic)。
- 在终端中运行 Shell 脚本,并传入文本文件名作为参数(例如 ./getpic.sh ./image.baidu.mhtml)。
代码示例
#!/bin/bash
# 读取文件内容
filename="$1"
content=$(cat "$filename")
# 创建 filename_pic 目录
mkdir -p "./"$1"_pic"
# 提取 URL
urls=$(echo "$content" | grep -o 'https://[^[:space:]]*\.png')
# 计算 URL 数量
count=$(echo "$urls" | wc -l)
# 打印 URL 数量
echo "共有 $count 个文件需要下载"
# 提取 URL 中的图片文件名,并下载到 pic 目录下
i=1
for url in $urls; do
echo "正在下载第 $i 个文件:$url"
filename=$(echo "$url" | sed -e 's/.*\///g')
#下载
curl -# -S -f --retry 5 -o "./"$1"_pic/$filename" $url
# 更新计数器
i=$((i+1))
done
curl命令的选项:
- #:显示进度条
- O:使用原始文件名保存文件
- S:在静默模式下,如果发生错误,显示错误信息
- f:如果发生错误,返回非零值
- retry 5:如果下载失败,重试5次
- o:指定输出文件名
``
成果展示
终端执行脚本:
$ ./getpic.sh ./image.baidu.mhtml
共有 11 个文件需要下载
正在下载第 1 个文件:https://img1.bdstatic.com/static/common/img/icon_cf1b905.png
################################################################################################################ 100.0%
正在下载第 2 个文件:https://emoji.cdn.bcebos.com/yunque/shouyebeijingtu.png
################################################################################################################ 100.0%
正在下载第 3 个文件:https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/baiduyun@2x-e0be79e69e.png
################################################################################################################ 100.0%
正在下载第 4 个文件:https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/zhidao@2x-e9b427ecc4.png
################################################################################################################ 100.0%
正在下载第 5 个文件:https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/baike@2x-1fe3db7fa6.png
################################################################################################################ 100.0%
正在下载第 6 个文件:https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/tupian@2x-482fc011fc.png
################################################################################################################ 100.0%
正在下载第 7 个文件:https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/baobaozhidao@2x-af409f9dbe.png
################################################################################################################ 100.0%
正在下载第 8 个文件:https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/wenku@2x-f3aba893c1.png
################################################################################################################ 100.0%
正在下载第 9 个文件:https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/jingyan@2x-e53eac48cb.png
################################################################################################################ 100.0%
正在下载第 10 个文件:https://dss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/topnav/yinyue@2x-c18adacacb.png
################################################################################################################ 100.0%
正在下载第 11 个文件:https://emoji.cdn.bcebos.com/yunque/shouyebeijingtu.png
################################################################################################################ 100.0%
下载完成的图片:
结语
以上就是用 Shell 脚本批量下载网页中的图片的拙劣方法示例。这种方法可以应用于不同的网页和资源类型,只需要修改一些参数和正则表达式即可。
某些通过网页加水印、缩放的图片,也可以通过此方法下载无水印无缩放的高清原图😊
希望这篇文章对您有所帮助。如果有任何问题或建议,欢迎留言。谢谢!