Python爬蟲照片

 

 

閒來沒事,自寫一個Python爬蟲,剛入門,大佬勿噴。
圖片分辨率大概只有720p,雖不是高清大圖,但練習練習Python還是很有用的。

 

import requests
import re
import os
 
#類型列表
Type_list = {1:'qingchun',2:'xiaohua',3:'chemo',4:'qipao',5:'mingxing',6:'xinggan',}
Type_list_cn = {'qingchun':'青春美眉','xiaohua':'美女校花','chemo':'性感車模','qipao':'旗袍美女','mingxing':'明星寫真','xinggan':'性感美女'}
#請求頭
hd = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
    }
 
#主函數
def main():
    try:
        for i in range(1,7):
            #輸出類型序號和名字 還有頁數
            print(f"{i}.{Type_list_cn[Type_list[i]]} 共{get_TotalPage(Type_list[i])}頁")
        #限制輸入
        while(True):
            Type_num = input('輸入要獲取的美女類型:')
            if Type_num.isdigit():
                Type_num = eval(Type_num)
                if Type_num in range(1,7):
                    break
                else:
                    print('請輸入1-6的數字!')
            else:
                print("請輸入數字!")
        #類型
        Type = Type_list[Type_num]
        #總頁數
        TotalPage = get_TotalPage(Type)
        #限制輸入
        while(True):
            DownloadPage = input("請輸入要獲取前多少頁(爲空則全部):")
            if DownloadPage == '':
                DownloadPage = TotalPage
                break
            elif DownloadPage.isdigit():
                DownloadPage = eval(DownloadPage)
                if DownloadPage in range(1,TotalPage+1):
                    break
                else:
                    print(f"請輸入1-{TotalPage}的數字!")
            else:
                print("請輸入數字!")
        pic(Type_num,Type,DownloadPage)
    except:
        print("程序出錯!\n")
 
#獲取總頁數
def get_TotalPage(Type):
    TotalPage = 0
    url = 'https://www.mm131.net/'+Type
    response = requests.get(url,headers = hd)
    response.encoding = 'gb2312'
    TotalPage_pattern = re.compile('(?<=下一頁</a><a href=\'list_)\d_\d+')
    #正則匹配總頁數
    match = (TotalPage_pattern.findall(response.text))
    TotalPage = eval(match[0].split('_')[1])
    return TotalPage
 
#下載圖片總功能
def pic(Type_num,Type,DownloadPage):
    print("\n正在處理第1頁")
    url = 'https://www.mm131.net/' + Type
    get_web(url,Type)
    if DownloadPage > 1:
        for page in range(2,DownloadPage+1):
            print("\n正在處理第{}頁".format(page))
            #拼湊當前頁url
            url = 'https://www.mm131.net/' + Type + '/list_' + str(Type_num) +'_'+ str(page) + '.html'
            get_web(url,Type)
 
#獲取當前頁網頁信息用以獲取套圖數量和套圖num
def get_web(url,Type):
    response = requests.get(url,headers = hd)
    response.encoding = 'gb2312'
    text_pattern = re.compile('您的位置[\s\S]*?末頁')
    #先正則匹配一次縮小範圍
    text = text_pattern.findall(response.text)
    PicList_pattern = re.compile(f'(?<=https://www.mm131.net/{Type}/)\d+')
    #再用正則匹配出套圖NUM
    PicList = PicList_pattern.findall(text[0])
    total = len(PicList)
    print(f"這頁有{total}個套圖\n")
    for i in range(1,total+1):
        pic_num = PicList[i-1]
        print(f"    正在處理第{i}個套圖:")
        #拼湊套圖頁面URL
        pic_url = 'https://www.mm131.net/' + Type + '/' + pic_num + '.html'
        get_pic(pic_url,pic_num,Type)
 
#獲取套圖頁面信息用以獲取套圖名字和圖片數量
def get_pic(pic_url,pic_num,Type):
    response = requests.get(pic_url,headers = hd)
    response.encoding = 'gb2312'
    pic_name_pattern = re.compile("(?<=<h5>).+(?=</h5>)")
    #套圖名字
    pic_name = pic_name_pattern.findall(response.text)[0]
    print("    套圖名字:"+pic_name)
    TotalPic_pattern = re.compile('(?<=共)\d+')
    #圖片數量
    TotalPic = eval(TotalPic_pattern.findall(response.text)[0])
    print("    共{}張圖片".format(TotalPic))
    #判斷當前路徑下是否存在相應目錄,沒有則創建
    if os.path.exists(f'圖片/{Type_list_cn[Type]}/{pic_name}') == False:
        os.makedirs(f'圖片/{Type_list_cn[Type]}/{pic_name}')
        #開始遍歷下載圖片
        for i in range(1,TotalPic+1):
            #文本進度條
            print("\r    正在下載第{:>2}張圖片{:>3}%[".format(i,round(i*100/(TotalPic),1))+"$"*i+"-"*(TotalPic-i)+"]",end='')
            #第1個圖片的referer和後面圖片不一樣
            if i == 1:
                referer = f'https://www.mm131.net/{Type}/{pic_num}.html'
            else:
                referer = f'https://www.mm131.net/{Type}/{pic_num}_{i}.html'
            #拼湊圖片URL
            url = f'https://img1.mmmw.net/pic/{pic_num}/{i}.jpg'
            download_pic(i,url,pic_name,Type,referer)
    else:
        print("    套圖已存在!",end = '')
    print("\n")
 
#下載圖片
def download_pic(i,url,pic_name,Type,referer):
    head = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36',
        'Referer': referer
        }
    response = requests.get(url,headers = head)
    #下載到對應文件夾
    try:
        file = open(f'./圖片/{Type_list_cn[Type]}/{pic_name}/{i}.jpg','xb')
        file.write(response.content)
        file.close
    except:
        print("    圖片已存在!")
         
#無限循環主程序
while(True):main()

pyinstaller 打包成品
鏈接: https://pan.baidu.com/s/1_-P14YnJkdxJLmqImqM3jw 提取碼: 2ukp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章