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,则会显示账号为登陆
在这里插入图片描述

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