1.代码
1.1 壁纸地址:http://lab.mkblog.cn/wallpaper/
import json
import os
import time
import requests
from tqdm import tqdm
# 请求头伪装浏览器
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.77 Safari/537.36",
"cookie": "Hm_lvt_ea4269d8a00e95fdb9ee61e3041a8f98=1620867340,1620974798,1623061160,1623110256; wzws_cid=b1ad87eee921168b37bf3e397317d1c7aac48ca06b77e468725e73e20439fb13f81fa1b47aed67a8f4e4005cb70e538fa7d0e0cba25515cd7ddd1ed6bfa7b768e26eb67d5f7887c245202c893c30d7f4; SL_GWPT_Show_Hide_tmp=0; SL_wptGlobTipTmp=1"}
# 程序开始时间
start = time.time()
# 如果没有这个文件夹就创建这个文件夹
pic_dir = 'D:/Python2020-邱勋涛/爬虫self/精美壁纸/'
if not os.path.exists(pic_dir):
os.mkdir(pic_dir)
# 爬取每个分类的url的总json url
url1 = "http://lab.mkblog.cn/wallpaper/api.php?cid=360tags"
# 打印json信息
picture_json_1 = requests.get(url1, headers).text
# print(picture_json_1)
# 转成列表信息,里面是分类壁纸的url,id,name
picture_json_2 = json.loads(picture_json_1)['data']
print(picture_json_2)
# 壁纸张数
zhangshu = 0
# 这里循环主要是要找到最终图片url的cid,拼凑成每个分类的的url
for p in range(len(picture_json_2)):
# 皮肤id
pic_id = picture_json_2[p]["id"]
print(pic_id)
# 分类名字
pic_name = picture_json_2[p]['name']
print(pic_name)
# 定义一个start为-30 ,是因为start从0开始每次递增30,通过url分析,最终到450(其实这也是这整个代码的一个bug,
# 因为url太多,我也不能确定每个url的start是不是会小于450或者大于450)
s_tart = -30
while s_tart <= 450:
s_tart += 30
url2 = "http://lab.mkblog.cn/wallpaper/api.php?cid=%s&start=%s&count=30" % (pic_id, s_tart)
print(url2)
# 每个壁纸的url的json数据
picture_json_3 = requests.get(url2).text
# 变成列表来去壁纸的名字和url
picture_json_4 = json.loads(picture_json_3)['data']
print(picture_json_4)
# print(len(picture_json_4))
# 获取每个分类的壁纸文件夹下所有的壁纸url和名字
for q in tqdm(range(len(picture_json_4))):
# 壁纸名字
pic_name_1 = picture_json_4[q]['tag']
print(pic_name_1)
# 壁纸url
pic_url = picture_json_4[q]['img_1600_900']
print(pic_url)
# 计算壁纸张数
zhangshu += 1
print(zhangshu)
# 分类文件夹,分类保存壁纸
pic_dir_1 = pic_dir + pic_name + "/"
if not os.path.exists(pic_dir_1):
os.mkdir(pic_dir_1)
# 通过url,获取壁纸的二进制信息
jm_picture = requests.get(pic_url).content
# 下载图片并且保存
with open(pic_dir_1 + pic_name_1 + '.jpg', 'wb') as f:
f.write(jm_picture)
# 程序结束时间
end = time.time()
# 计算执行时间
over_time = end - start
print("一共下载了%s张精美壁纸,总共花费了%s秒" %(zhangshu,over_time) )
# 邱勋涛撰写,未经允许,不得转载,否则坐牢吧
# 直接复制代码运行,需要修改代码中的俩路径,别这么懒
# 这里面注释很详细,认真看能看懂,不懂就问同学
2.效果