Python3x 爬取妹子图

 

思路:1get_totalpages(url)  通过【性。感。美。女。图】获得该版块的总页数 【首页1234567891011下一页末页共 21页1034条】

2get_sercoverurl(pageurl) 版块每一页有50个系列的封面,获得每个封面的地址。

3进入该封面(即系列),获得该系列图片的总张数【[url=]共79页:[/url]上一页12345678910111213下一页】

4get_serurl(sercoverurl) 获得每一个图片所在页面的地址

5urllib.request.urlretrieve(picurl, filename) 获得图片的下载地址。

根据网站结构,总结了 版块 -< 系列 -- 系列封面 -< 图片页面 -- 图片下载地址 的编排规律, 

其中" -< " 表示 1对多,即1个版块有多个系列, 1个系列封面有多个图片;

    " -- " 表示 1对1,1个系列只有1个封面, 1个图片页面只有1个图片下载地址

搞清楚这些就明白哪些地方需要循环了。

废话太多,直接上代码吧!

import urllib.request
import os
import re

def url_open(url):
    req = urllib.request.Request(url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.65 Safari/537.36')
    response = urllib.request.urlopen(url)
    html = response.read()
    return html

def get_totalpages(url):                          #通过版块地址获得该版块所有页数(每页有50个系列),返回值为数字
    html = url_open(url).decode('gbk')
    reg = r'共 <strong>(.*?)</strong>页'
    totalpages = re.findall(reg,html)[0]
    return int(totalpages)

def get_sercoverurl(pageurl):                    #通过页面地址获得该页面下所有系列的封面地址,返回值为列表
    html = url_open(pageurl).decode('gbk')
    reg = r'<p><a href="(.*?)"'
    sercoverurl = re.findall(reg, html)
    return sercoverurl                          #各个系列的封面 列表

def get_serurl(sercoverurl):                  #通过封面获得该系列的所有图片所在的页面地址 (每个页面有一张图片,其地址待下一步获取)
    html = url_open(sercoverurl).decode('gbk')   #
    reg1 = r'<li><a>共(.*?)页'
    totalsheets = int(re.findall(reg1, html)[0])  # 获得该系列图片总张数
    serurls = []
    serurls.append(sercoverurl)
    for eachsheet in range(2,totalsheets+1):
        serurl = sercoverurl[:-5] + '_' + str(eachsheet) + sercoverurl[-5:]
        serurls.append(serurl)
    return serurls

def get_picurl(serurl):
    html = url_open(serurl).decode('gbk')
    reg = r"<img src='(.*?)'"
    picurl = re.findall(reg,html)[0]

    return picurl     #只有一个地址,即封面地址

def download_cl(folder = '爬虫youmzi'):               #主程序
    try:
        os.mkdir(folder)
        os.chdir(folder)
    except:
        os.chdir(folder)
    url = 'http://www.youmzi.com/meinv.html'
    totalpages = get_totalpages(url)
    print(totalpages)
    for eachpage in range(1,totalpages+1):
        pageurl = url[:-5] + '_'+ str(eachpage) + url[-5:]
        print(pageurl)
        sercoverurl = get_sercoverurl(pageurl)       #获得系列的封面地址 列表
        print(sercoverurl)
        for eachsercover in sercoverurl:
            serurl = get_serurl(eachsercover)      #返回系列的所有地址 列表
            for oneser in serurl:
                picurl = get_picurl(oneser)
                print(picurl)
                filename = picurl.split('/')[-1]
                urllib.request.urlretrieve(picurl, filename)

if __name__ == '__main__':
    download_cl()

 

posted @ 2016-10-10 23:25  编程青年的崛起  阅读(2598)  评论(0编辑  收藏  举报