爬取豆瓣美女图片网美女图片

'''
Created by swh on 2017.07.31
'''
#_*_coding:utf-8_*_

from bs4 import BeautifulSoup
import urllib2
import urllib

# 根据连接地址获取网站数据
def getHtml(url):
    # 由于该网站加入了反爬机制,所以通过模拟浏览器的方式加入浏览器信息
    headers = {
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'
    }
    req = urllib2.Request(url,headers=headers)
    # timeout=20 设置网络请求超时20秒
    html = urllib2.urlopen(req,timeout=20).read()
    return html


'''
在图片命名的时候为了爬取到的图片能够容易搜索,所以以图片在网站上的标题为名称,但是有的名称是相同的,为了防止图片覆盖,根据字典键的唯一性,设置图片的名字为键,图片序号为值,在图片名字重复的时候以 图片名称 + 图片序号命名
'''
imgN = {}
# 根据请求到的网页内容进行数据解析
def getImgUrl(html):
    # 通过bs4框架进行解析,这里用内置的默认解析器html.parser,也可以使用lxml解析器,需要安装
    soup = BeautifulSoup(html,"html.parser")
    #*************************************
    # 通过类名查找每个图片的整块li,是一个列表
    # 每个块的内容:<li class="span3"> <div class="thumbnail" style="text-align: center;"> <div class="img_single"> <a class="link" href="https://www.dbmeinv.com:443/dbgroup/1403774" target="_topic_detail"> <img alt="现在是凌晨零点五十四分" class="height_min" οnerrοr="img_error(this);" src="http://ww3.sinaimg.cn/bmiddle/0060lm7Tgy1fi0q9lp4i1j30rs0rsgoh.jpg" title="现在是凌晨零点五十四分"/> </a> </div> <hr/> <div class="bottombar"> <span class="fl p5"> <a class="link" href="https://www.dbmeinv.com:443/dbgroup/1403774" target="_topic_detail"> 现在是凌晨零点五十四分 </a> </span> <span class="fr p5 meta"> <span class="mstar-empty star" title="加入收藏" topic-id="105480524" topic-image-id="1175576"></span> <span class="starcount" topic-image-id="1175576">0</span> </span> </div> </div> </li>
    # *************************************
    cont = soup.select(".span3")
    for item in cont:#遍历每个数据块
        # 从该数据块中查找img元素,由于返回列表,但是我们每个数据块中只有一个img,所以用[0]取出,再用get('src')取出图片地址
        imgUrl = item.select("img")[0].get("src")
        # 跟图片地址方式相同,出去标题作为图片名称
        name = item.select("img")[0].get("title")
        # 根据图片地址,取出图片后缀,豆瓣美女图片网我没具体看,在其他网站爬取图片的时候有gif图,如果保存的时候都以jpg保存,就会失去动态效果,所以我们去网站上的后缀,用于保存图片的格式,rfing('.')从后向前查找'.'的索引
        index = imgUrl.rfind('.')
        # 截取后缀
        dd = imgUrl[index+1:]
        # 判断这个图片名称是否已经存在,如果存在则把图片的索引取出并+1,记得在同级目录下创建picture文件夹
        if imgN.has_key(name):
            imgN[name] = imgN[name] + 1
            # 对于图片名字已经存在的,用图片名字+索引(图片名字为键对应的值)进行命名
            urllib.urlretrieve(imgUrl,'./picture/%s%d.%s' % (name,imgN[name],dd))
        else:
            imgN[name] = 0
            # 如果图片名字第一次出现,直接以图片名字命名保存图片
            urllib.urlretrieve(imgUrl,'./picture/%s.%s' % (name,dd))


if __name__ == '__main__':
    # 截止到2017-07-31 豆瓣美女图官网总共图片页数为5064
    # 这里仅做测试,我只抓取了两页,如果大家想抓取更多,可以把3改为5065,后面可能会增加。根据实际情况来
    for i in range(1,3):
        print "https://www.dbmeinv.com/?pager_offset=%s" % str(i)
        html = getHtml("https://www.dbmeinv.com/?pager_offset=%s" % str(i))
        getImgUrl(html)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值