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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM