在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,但是通常用鼠标右键的方式保存,但是有时候没有另存为选项,且一张一张的保存,耗时耗力。本文将以python批量爬取某图片网站的图片为例,演示如何批量保存某网站的图片。
以爬取美女图片网为例:http://www.mm131.com/
一、获取网站页面数据
def getHtml(url):
page = urllib.urlopen(url)
html = page.read()
return html
二、获取想要的图片数据
通过网站页面数据我们得知图片信息如下:
<div class="content-pic"><a href='1_2.html'><img alt="宝马小妹妩媚自拍(图1)" src="http://img1.mm131.com/pic/01/1.jpg" /></a></div>
修改代码:
def getImg(html,filename,dir):
#判断文件夹是否存在,如果不存在则新建
if not os.path.isdir(dir):
os.mkdir(dir)
reg = r'src="(.+?\.jpg)"'
imgre = re.compile(reg)
imglist = re.findall(imgre,html)
for imgurl in imglist:
urllib.urlretrieve(imgurl,dir+'/%s.jpg' % filename)
break
return imglist
因为每个页面都有很多张照片,但我们只想要第一张大图,所以只需要保存第一张图片即跳出当个页面图片获取;批量获取会有多个系列图片,故新建文件夹分系列保存图片。
三、批量保存图片数据
根据分析每张图片网页地址,得出每个系列图片仅需要在当个系列地址后加“_n.html”;
def geturl(dir):
y = 1
strA = "start"
while y>=1:
if y==1:
print dir
html = getHtml("http://www.mm131.com/qingchun/"+str(dir)+".html")
else:
html = getHtml("http://www.mm131.com/qingchun/"+str(dir)+"_"+str(y)+".html")
imglist = getImg(html,y,str(dir))
#如果mglist不为空,则保存图片
if imglist:
getImg(html,y,str(dir))
else:
strA ="end"
return strA
y=y+1
四、通过shell脚本去掉空文件夹
#!/bin/bash
deleteempty() {
find ${1:-.} -mindepth 1 -maxdepth 1 -type d | while read -r dir
do
if [[ -z "$(find "$dir" -mindepth 1 -type f)" ]] >/dev/null
then
echo "$dir"
rm -rf ${dir} 2>&- && echo "Empty, Deleted!" || echo "Delete error"
fi
if [ -d ${dir} ]
then
deleteempty "$dir"
fi
done
}
deleteempty
最后则爬取了以下图片:
以上则为批量保存图片的示例,大家可以以此为例爬取自已想要的视频网站的图片,以下地址为完整代码:
http://download.csdn.net/download/oolovexx/10011837