shell 爬取图片下载到本地


#!/bin/bash #ddmm 2018/07/18 #if [ -z $string ] 如果string 为空 #-z STRING the length of STRING is zero read -p "请输入要爬取的页面数(直接回车,默认为10):" page_num if [ -z $page_num ];then page_num=10 fi read -p "请输入要保存的文件夹名称(直接回车,默认为img):" save_path_name if [ -z $save_path_name ];then save_path_name="img" fi for i in `seq 1 $page_num` do #循环N次,将需要下载的img的url保存到imgurl.txt echo "当前处理第$i个url" #curl https://www.dbmeinv.com/?pager_offset=${i} , curl抓取网页内容 #grep -Eo '<img[^>]*src="[^"]*[^"]*"[^>]*>' #grep -E表示用扩展正则表达式 -O表示只输出匹配到的部分 #正则解释 linux 的正则不像js,php,java等,个人用的不是很习惯,所以写的也很烂 #<img[^>]*src="[^"]*[^"]*"[^>]*> 匹配一个 img标签; #[^>]表示匹配除了>以外的字符,*表示0个或多个,so,[^"]*也是同理 #grep -Eo 'src="[^"]*"' 将img标签的src="xxx"部分提取了出来 #sed 's/src="//g' ,s代表替换指定字符,第一个/后面是被替换的字符src=",第二个/后面是替换为的字符(这里替换为空),/g代表全局 #sed 's/"//g' ,与上面同理,将最后一个"去掉 #>> imgurl.txt 将内容拼接到imgurl.txt文件中 curl https://www.dbmeinv.com/?pager_offset=${i} | grep -Eo '<img[^>]*src="[^"]*[^"]*"[^>]*>' | grep -Eo 'src="[^"]*"' | sed 's/src="//g' | sed 's/"//g' >> imgurl.txt done #当前目录下的img文件夹不存在,则新建文件夹 if [ ! -d "./$save_path_name" ]; then mkdir "./$save_path_name" fi #计数 file_count=0; #一行一行遍历刚刚保存url的imgurl.txt文件 #sort imgurl.txt | uniq 代表去除重复行 for line in `sort imgurl.txt | uniq` do #%s 从1970年1月1日00:00:00到目前经历的秒数 ,%N当前时间的纳秒数据 , $(date +%s%N)即秒数 + 纳秒,保证文件名唯一 #curl -o 表示把输出写到该文件中,即指定文件名并写到文件 file_name=$(date +%s%N)".jpg" file_count=`expr $file_count + 1` echo "当前下载第$file_count个图片" curl -o ./$save_path_name/$file_name $line done

 

原理就是:用curl先将图片的img url保存到.txt中,然后再逐个下载,注释写的很详细了,就不累赘讲了

转载于:https://www.cnblogs.com/lzs-888/p/9332397.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值