原理请看:Python?30行代码?爬取王者荣耀所有英雄皮肤图片?_易果啥笔的博客-CSDN博客
我稍微改了一下:因为王者这个herolist.json文件里的信息更新的不太及时,导致爬取出来的皮肤有很多的缺漏;
具体修改的herolist.json文件里的"skin_name"进行了补充,大家也可以把每个英雄缺漏的皮肤名字加上,修改后的herolist.json文件就在自己的电脑上了,直接读取就可以了;
代码是这样的:
import requests
import os
import json
def download_wzry_hero_picture():
with open('herolist.json',encoding='utf-8') as fd:
dict_hero_info = json.load(fd)#直接读取json的文本并转为为list
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
for key in dict_hero_info: # 遍历字典
name = key['cname'] # 英雄名字
id = key['ename'] # 英雄编号
# 如果没有skin_name,则输出:"无图片"
skin_name_default = key.setdefault('skin_name', '无图片')#setdefault()函数取skin_name字段,没有skin_name字段,添加skin_name字段并赋值为‘无图片’
print(skin_name_default)
count = skin_name_default.count('|') # 利用 count() 查询字符出现的次数
skin_name_list = skin_name_default.split('|') # 利用 split() 分割字符返回列表
if not os.path.exists(name): # 创建图片保存的文件夹
os.mkdir(name)# mkdir()创建文件夹
for i in range(1, count + 2):
# 构造英雄皮肤地址
url2 = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/%s/%s-bigskin-%d.jpg' % (id, id, i)#文本利用循环用 "%x"%(x)
img = requests.get(url=url2,headers=header) # 获取图片的二进制数据
print(url2)
pictName = skin_name_list[i-1]
# 下载并保存图片
with open(name + '/' + pictName + '.jpg', 'wb') as f:
f.write(img.content) # 写入图片
print('成功下载并保存图片~')
# 程序入口
if __name__ == '__main__':
download_wzry_hero_picture()