zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    MATLAB 模板匹配
    ACDSee15 教你如何轻松在图片上画圈圈、画箭头、写注释
    Qt 显示一个窗体,show()函数和exec()函数有什么区别?
    Qt 将窗体变为顶层窗体(activateWindow(); 和 raise() )
    Qt QSS样式化 菜单Qmenu&QAction
    Qt 获取文件夹中的文件夹名字
    Qt 删除文件夹或者文件
    欧洲终于承认“工业4.0”失败,互联网经济严重落后中美
    深入浅出数据结构
    浅谈城市大脑与智慧城市发展趋势
  • 原文地址:https://www.cnblogs.com/alan-babyblog/p/5947698.html
Copyright © 2011-2022 走看看