很多人都知道,网络上有很多的壁纸,但是大部分都是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,则会显示账号为登陆