#!/bin/bash

#ddmm //

#if [ -z $string ] 如果string 为空
#-z STRING the length of STRING is zero read -p "请输入要爬取的页面数(直接回车,默认为10):" page_num
if [ -z $page_num ];then
page_num=
fi
read -p "请输入要保存的文件夹名称(直接回车,默认为img):" save_path_name
if [ -z $save_path_name ];then
save_path_name="img"
fi for i in `seq $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=; #一行一行遍历刚刚保存url的imgurl.txt文件
#sort imgurl.txt | uniq 代表去除重复行
for line in `sort imgurl.txt | uniq`
do
#%s 从1970年1月1日00::00到目前经历的秒数 ,%N当前时间的纳秒数据 , $(date +%s%N)即秒数 + 纳秒,保证文件名唯一
#curl -o 表示把输出写到该文件中,即指定文件名并写到文件
file_name=$(date +%s%N)".jpg"
file_count=`expr $file_count + `
echo "当前下载第$file_count个图片"
curl -o ./$save_path_name/$file_name $line
done

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

shell 爬取图片下载到本地的更多相关文章

  1. scrapy爬虫系列之三--爬取图片保存到本地

    功能点:如何爬取图片,并保存到本地 爬取网站:斗鱼主播 完整代码:https://files.cnblogs.com/files/bookwed/Douyu.zip 主要代码: douyu.py im ...

  2. 使用Scrapy爬虫框架简单爬取图片并保存本地(妹子图)

    初学Scrapy,实现爬取网络图片并保存本地功能 一.先看最终效果 保存在F:\pics文件夹下 二.安装scrapy 1.python的安装就不说了,我用的python2.7,执行命令pip ins ...

  3. Python多线程Threading爬取图片,保存本地,openpyxl批量插入图片到Excel表中

    之前用过openpyxl库保存数据到Excel文件写入不了,换用xlsxwriter 批量插入图片到Excel表中 1 import os 2 import requests 3 import re ...

  4. Python使用Scrapy爬虫框架全站爬取图片并保存本地(妹子图)

    大家可以在Github上clone全部源码. Github:https://github.com/williamzxl/Scrapy_CrawlMeiziTu Scrapy官方文档:http://sc ...

  5. 【Python】- scrapy 爬取图片保存到本地、且返回保存路径

    https://blog.csdn.net/xueba8/article/details/81843534

  6. python +requests 爬虫-爬取图片并进行下载到本地

    因为写12306抢票脚本需要用到爬虫技术下载验证码并进行定位点击所以这章主要讲解,爬虫,从网页上爬取图片并进行下载到本地   爬虫实现方式: 1.首先选取你需要的抓取的URL:2.将这些URL放入待抓 ...

  7. 使用Scrapy爬取图片入库,并保存在本地

    使用Scrapy爬取图片入库,并保存在本地 上 篇博客已经简单的介绍了爬取数据流程,现在让我们继续学习scrapy 目标: 爬取爱卡汽车标题,价格以及图片存入数据库,并存图到本地 好了不多说,让我们实 ...

  8. Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本

    Shell 命令行实现将一个站点页面全部下载到本地并替换其中链接的脚本 不知道为什么,我总想用 Shell 脚本来实现把一个站点内容给下载下来.但是下载什么站点我确不知道.今天尝试了一下利用 curl ...

  9. Python3爬取人人网(校内网)个人照片及朋友照片,并一键下载到本地~~~附源代码

    题记: 11月14日早晨8点,人人网发布公告,宣布人人公司将人人网社交平台业务相关资产以2000万美元的现金加4000万美元的股票对价出售予北京多牛传媒,自此,人人公司将专注于境内的二手车业务和在美国 ...

随机推荐

  1. 在c:forEach与s:iterator里面使用if标签判断当前位置是否为2的倍数

    在c:forEach与s:iterator里面使用if标签判断当前位置是否为2的倍数 c:forEach: <c:forEach var="workflow" items=& ...

  2. MongoDB学习笔记(转)

    MongoDB学习笔记(一) MongoDB介绍及安装MongoDB学习笔记(二) 通过samus驱动实现基本数据操作MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB ...

  3. redis/memcache监控管理工具——treeNMS

    TreeNMS可以帮助您搭建起一套用于redis的监控管理系统,也支持Memcached,让您可以通过web的方式对数据库进行管理,有了它您就可以展示NOSQL数据库.编辑修改内容,另外还配备了sql ...

  4. ESP8266代码中的存储标记

    const uint8 MyArr[1024] ICACHE_RODATA_ATTR = {0}; void MyFun() ICACHE_FLASH_ATTR { } 这种 ICACHE 开头的宏作 ...

  5. 饮冰三年-人工智能-Python-20 Python线程、进程、线程

    进程:最小的数据单元 线程:最小的执行单元 一: 1:线程1 import threading #线程 import time def Music(): print("Listen Musi ...

  6. CSS之分组选择器和嵌套选择器

    分组选择器, 将一个样式应用于多个类,或者标签啥的 每个选择器用逗号隔开 <!DOCTYPE html> <html> <head> <meta charse ...

  7. 【BZOJ4589】Hard Nim(FWT)

    题解: 由博弈论可以知道题目等价于求这$n$个数$\^$为0 快速幂$+fwt$ 这样是$nlog^2$的 并不能过 而且得注意$m$的数组$\^$一下会生成$2m$ #include <bit ...

  8. c&c++中的宏

    1 c&c++中的宏 do {...} while (0); offsetof & container_of 2 引用 [1] do {...} while (0) 在宏定义中的作用 ...

  9. mysql 删除所有表

    SELECT concat('DROP TABLE IF EXISTS ', table_name, ';')FROM information_schema.tablesWHERE table_sch ...

  10. 014 链表中倒数第k个结点

    1.题目 输入一个链表,输出该链表中倒数第k个结点. 2.思路 Java代码,通过校验.代码思路如下:两个指针,先让第一个指针和第二个指针都指向头结点,然后再让第一个指正走(k-1)步,到达第k个节点 ...