Shell 脚本批量下载网页图片


前言

在日常工作、生活中,需要从网站、文件中提取某类资源的 URL ,并将它们下载到本地。如果手动操作,可能会非常耗时且繁琐,使用 shell 脚本可以轻松地自动化这个过程。

本文将以百度图片网站首页为例,介绍如何用 Shell 脚本从网页中提取图片链接,并下载这些图片到指定的目录中。


Sehll脚本实现

步骤

  1. 将网页保存为文本文件(例如 image.baidu.mhtml)。
  2. 编写一个 Shell 脚本(例如 getpic.sh),用 curl命令来下载图片,并将它们保存到以文本文件名命名的目录中(例如 image.baidu_pic)。
  3. 在终端中运行 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 脚本批量下载网页中的图片的拙劣方法示例。这种方法可以应用于不同的网页和资源类型,只需要修改一些参数和正则表达式即可。
某些通过网页加水印、缩放的图片,也可以通过此方法下载无水印无缩放的高清原图😊

希望这篇文章对您有所帮助。如果有任何问题或建议,欢迎留言。谢谢!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张芬奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值