Python爬壁紙

很多人都知道,網絡上有很多的壁紙,但是大部分都是1980*1080的分辨率,可是這專爲Mac系統做的壁紙卻是5000+*3000+的分辨率,你可以想象一下兩種壁紙的差距,這裏我用的是火狐瀏覽器,不多說了,直接上代碼

# !/usr/bin/env python
# 獲取一個網址 pip install requests
from requests import get
# 判斷文件類型的第三方包 pip install filetype
from filetype import guess
# 命名文件或者目錄
from os import rename
# 創建目錄的包
from os import makedirs
# 判斷文件是否存在
from os.path import exists
# 將已經編碼的json字符串解碼爲python對象
from json import loads
# 上下文管理器操作模塊 當我們請求api的時候,如果程序運行完成了,就關閉鏈接
from contextlib import closing

'''
1.獲取圖片資源
2.下載圖片資源
'''
# 文件下載器 參數:1.資源鏈接 2.保存路徑 3.當前下載數量 4.圖片總數
def down_load(file_url, file_path, now_wallpaper_count, all_wallpaper_count):
    headers = {
        "User-Agent":
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
    }

    # 開始下載圖片
    with closing(get(file_url, headers=headers, stream=True)) as response:
        # 單次請求最大值
        chunk_size = 1024

        # 文件總大小 這個參數在瀏覽器響應頭中
        content_size = int(response.headers['content-length'])

        # 初始化當前已經傳輸的大小
        data_count = 0

        # 文件操作
        if response.status_code == 200:
            with open(file_path, 'wb') as file:
                for data in response.iter_content(chunk_size=chunk_size):
                    file.write(data)

                    done_block = int((data_count / content_size) * 50)
                    data_count = data_count + len(data)

                    # 當前的下載百分比
                    now_percentage = (data_count / content_size) * 100

                    print("\r %s: [%s%s] %d%% %d/%d" % (file_path, done_block * '*', ' ' * (50 - 1 - done_block), now_percentage, now_wallpaper_count, all_wallpaper_count), end=' ')

    # 下載完圖片後獲取圖片拓展名
    file_pype = guess(file_path)
    try:
        rename(file_path, file_path + '.' + file_pype.extension)
    except FileExistsError:
        print('該資源已經存在...')
        rename(file_path, file_path + '副本' + '.' + file_pype.extension)

# 獲取圖片資源
def spider_wallpaper(type_id, wallpaper_count):
    url = ''
    if(type_id == 1):
        url = 'https://service.paper.meiyuan.in/api/v2/columns/flow/5c68ffb9463b7fbfe72b0db0?page=1&per_page=' + str(wallpaper_count)
    elif(type_id == 2):
        url = 'https://service.paper.meiyuan.in/api/v2/columns/flow/5c69251c9b1c011c41bb97be?page=1&per_page=' + str(wallpaper_count)
    elif(type_id == 3):
        url = 'https://service.paper.meiyuan.in/api/v2/columns/flow/5c81087e6aee28c541eefc26?page=1&per_page=' + str(wallpaper_count)
    elif(type_id == 4):
        url = 'https://service.paper.meiyuan.in/api/v2/columns/flow/5c81f64c96fad8fe211f5367?page=1&per_page=' + str(wallpaper_count)

    # 因爲當我們用爬蟲程序去訪問網站的時候,那個網站會檢測你是不是用瀏覽器
    # 去訪問的,如果不是,會禁止你訪問
    # 模擬瀏覽器向網站發請求
    headers = {
        "User-Agent":
            "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
    }

    response = get(url, headers=headers)

    # 把json數據轉成python對象
    wallpaper_data = loads(response.content)

    # 已經下載的圖片張數 初始值
    now_wallpaper_count = 1

    # 所有的圖片張數
    all_wallpaper_count = len(wallpaper_data)

    # 開始下載並保存5k分辨率壁紙
    make_dir = ''
    for wallpaper in wallpaper_data:
        # 創建一個文件夾來存放我們下載的圖片
        if type_id == 1:
            if not exists('./' + '最新壁紙'):
                makedirs('./' + '最新壁紙')
                make_dir = '最新壁紙'

        elif type_id == 2:
            if not exists('./' + '最熱壁紙'):
                makedirs('./' + '最熱壁紙')
                make_dir = '最熱壁紙'

        elif type_id == 3:
            if not exists('./' + '女生壁紙'):
                makedirs('./' + '女生壁紙')
                make_dir = '女生壁紙'

        elif type_id == 4:
            if not exists('./' + '星空壁紙'):
                makedirs('./' + '星空壁紙')
                make_dir = '星空壁紙'

        # print(wallpaper)
        # 準備下載的圖片鏈接
        file_url = wallpaper['urls']['raw']

        # 準備下載的圖片鏈接
        file_name_only = file_url.split('/')

        # 以最後一個url參數作爲壁紙名稱
        file_name_only = file_name_only[len(file_name_only) - 1]

        # 拼接下載路徑
        file_path = './' + make_dir + '/' + file_name_only

        # 下載圖片
        down_load(file_url, file_path, now_wallpaper_count, all_wallpaper_count)
        print('\t' + file_name_only)
        now_wallpaper_count += 1

if __name__== "__main__":
    while(True):
        print('\n\n')

        # 選擇壁紙類型
        wall_paper_id = input('請輸入壁紙類型(數字) [1.最新壁紙 2.最熱壁紙 3.女生壁紙 4.星空壁紙]:')

        # 判斷輸入是否正確
        while (wall_paper_id != str(1) and wall_paper_id != str(2) and wall_paper_id != str(3) and wall_paper_id != str(4)):
            wall_paper_id = input('請重新輸入壁紙類型(數字) [1.最新壁紙 2.最熱壁紙 3.女生壁紙 4.星空壁紙]:')

        # 選擇要下載的壁紙數量
        wall_paper_count = input('請輸入要下載的5K超清壁紙的數量: ')

        # 判斷輸入是否正確
        while(int(wall_paper_count) <= 0):
            wall_paper_count = input('請重新輸入要下載的5K超清壁紙的數量:')

        # 開始爬取5k超清壁紙
        print('正在下載5k超清壁紙...')
        spider_wallpaper(int(wall_paper_id), int(wall_paper_count))
        print('\n下載5k超清壁紙成功...')
        break

下圖是怎樣在瀏覽器上獲取你想要的的到的"User-Agent":,
在這裏插入圖片描述

下圖是獲取正確的api:左邊的列表裏面有一個叫域名的東西,只看其中有api的,點擊就看右邊,直到出現和圖中類似的纔是正確的api,如果不是正確的api,則會顯示賬號爲登陸
在這裏插入圖片描述

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