Linux 爬取批量bing图库的图片

Linux shell脚本实现爬取批量bing图库的图片

访问https://bing.ioliu.cn/?p=23可以看到bing图库第23页的内容,这个Web页有多个图片小样,将鼠标放到某个小样上,如右上角,可见中文说明信息“野花草甸上的一只欧亚雕鸮,德国莱茵兰-普法尔茨”和日期信息2019-08-03,点击一下,此图片就可以下载。编写脚本程序bing.sh,将这个图库中照片全部下载下来存放到本地bing目录中,上面URL中p=23可以换成p=1到p=126可访问126个页,每页有12个图,每个图的日期,中文说明信息和下载地址及文件名html文件中可提取。要求下载后的文件命名为“日期 中文说明.jpg”例如:2019-08-03 野花草甸上的一只欧亚雕鸮,德国莱茵兰-普法尔茨.jpg。

要求:命令行参数为两个,过指定页号区间限定下载范围,没有参数时页号区间为1-126,要允许多个程序并发;不重复下载已下载的图片。

几点注意事项:
1、直接用wget获取网页信息
2、正则式过滤,直接获取标签为 “< h3> ” 和 “ ”之间的信息
’grep -o '

[^<>(]*'
3、shell脚本中 字符串拼接:

str1=$name$url  #中间不能有空格
str2="$name $url"  #如果被双引号包围,那么中间可以有空格
str3=$name": "$url  #中间可以出现别的字符串

4、shell脚本中 变量后面和等号之间无空格!

5、sh test.sh总报错:bad substitution,如下图。查阅资料发现,这与linux shell使用的是/bin/sh,还是/bin/bash有关系。我的脚本中指定使用的是/bin/bash shell,但是我在调试的时候使用的是sh shell,因此调试时导致错误提示信息。解决方法:使用bash -x test.sh进行调试,则成功。

6、在做命令行传入两个参数的时候,直接用$1和$2来表示第一个和第二个参数就可以了。

7、用下面这个命令实现下载图片,并且重命名

curl -o ./$path/${times[$i]}" "${names[$i]} $url 

附源代码:

#!/bin/bash

page_num1=$1
page_num2=$2
if [ -z $1 ];then
    page_num1=1
fi
if [ -z $2 ];then
    page_num2=126
fi

for i in `seq $page_num1 $page_num2`
do

echo "当前处理第$i个url"


curl https://bing.ioliu.cn/?p=$i | grep -Eo ']*src="[^"]*[^"]*"[^>]*>'  | grep -Eo 'src="[^"]*"' | sed 's/src="//g' | sed 's/"//g' >> imgage.txt

curl https://bing.ioliu.cn/?p=$i | grep -Eo '

(.|\n)*?

' | sed 's/<[^>]*>/ /g' | sed 's/(/ /g' | sed 's/)/ /g' | sed 's/©/ /g' | sed 's/\// /g' | sed 's/分享/\n/g' | sed 's/[0-9a-zA-Z]*/ /g' | sed 's/- -/ /g' | sed 's/+//g' | sed 's/\ //g' >> z1.txt curl https://bing.ioliu.cn/?p=$i | grep -o '20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]' >> z2.txt done path="bing" if [ ! -d "./$path" ]; then mkdir "./$path" fi a=0 for line in `cat z1.txt` do name=$line names[$a]=$name let a++ done b=0 for line in `cat z2.txt` do time=$line times[$b]=$time let b++ done i=0; for url in `sort imgage.txt | uniq` do i=`expr $i + 1` echo "当前下载第$i个图片" curl -o ./$path/${times[$i]}" "${names[$i]} $url done

代码运行效果:
Linux 爬取批量bing图库的图片_第1张图片
Linux 爬取批量bing图库的图片_第2张图片

Linux 爬取批量bing图库的图片_第3张图片

你可能感兴趣的:(Linux)