Python批量爬取某图片网站图片

在我们日常上网浏览网页的时候,经常会看到一些好看的图片,我们就希望把这些图片保存下载,但是通常用鼠标右键的方式保存,但是有时候没有另存为选项,且一张一张的保存,耗时耗力。本文将以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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值