在家呆着太无聊了,打玩王者也没事做,干脆自己做一个抽皮肤的程序爽一爽吧!
要想抽皮肤,首先得有皮肤图片啊。好在这些图片并不难找,用很简单的程序就能爬取下来了:
import os
import requests
url = 'https://pvp.qq.com/web201605/js/herolist.json'
herolist = requests.get(url) # 获取英雄列表json文件
herolist_json = herolist.json() # 转化为json格式
hero_name = list(map(lambda x: x['cname'], herolist.json())) # 提取英雄的名字
hero_number = list(map(lambda x: x['ename'], herolist.json())) # 提取英雄的编号
# 下载图片
def downloadPic():
i = 0
for j in hero_number:
# 创建文件夹
os.mkdir("C:/Users/lin042/Desktop/wangzhe/" + hero_name[i])
# 进入创建好的文件夹
os.chdir("C:/Users/lin042/Desktop/wangzhe/" + hero_name[i])
i += 1
for k in range(10):
# 拼接url
onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(
j) + '-bigskin-' + str(k) + '.jpg'
im = requests.get(onehero_link) # 请求url
if im.status_code == 200:
open(str(k) + '.jpg', 'wb').write(im.content) # 写入文件
downloadPic()
这里采用了拼接url的办法,因为每个英雄的皮肤数量不一样,所以就用1-10的数字来拼接,没有就跳过。程序运行结束后,就会得到所有的皮肤图片:
![85ee16a2617d4cf17ab8cd0a09bf7bc2.png](https://img-blog.csdnimg.cn/img_convert/85ee16a2617d4cf17ab8cd0a09bf7bc2.png)
接下来就用这些图片做一个抽卡程序吧。我想到的逻辑是根据输入的英雄名称,随机选取该英雄文件夹下的一张图片并显示;如果输入“随机”或是输入错误,则在所有图片中随机选取一张并显示;输入“q”则退出程序。下面是完整代码:
import glob
from PIL import Image
import random
import re
strs = ""
while (strs != 'q'):
print("请选择要抽取的英雄(输入英雄名称或随机):")
strs = input()
#随机抽取
if(strs == "随机"):
path = glob.glob("C:/Users/lin042/Desktop/wangzhe/*/*.jpg") #获取所有图片的路径
num = len(path)-1
i = random.randint(0,num)
pic = path[i] #随机选取其中一个路径
res = ''.join(re.findall('[u4e00-u9fa5]',pic)) #提取其中的中文,也就是英雄名称,用于显示
print("恭喜你抽到了"+res+"!")
img = Image.open(pic)
img.show()
#指定抽取
elif(strs != 'q'):
pic = "C:/Users/lin042/Desktop/wangzhe/"+strs+"/*.jpg"
try:
path = glob.glob(pic) #如果路径不存在,会在这一步跳出try进入except
num = len(path)-1
i = random.randint(0,num)
pic = path[i]
print("恭喜你抽到了"+strs+"!")
img = Image.open(pic)
img.show()
#如果该英雄不存在(即文件夹不存在),则随机抽取
except:
print("该英雄不存在,为您随机抽取!")
path = glob.glob("C:/Users/lin042/Desktop/wangzhe/*/*.jpg")
num = len(path)-1
i = random.randint(0,num)
pic = path[i]
res = ''.join(re.findall('[u4e00-u9fa5]',pic))
print("恭喜你抽到了"+res+"!")
img = Image.open(pic)
img.show()
#退出
else:
pass
随机的实现是利用glob.glob先读取所有图片的路径path,然后再获取随机数i作为索引值,找到对应路径的图片。
下面是运行结果,就抽取我最喜欢的鲁班七号吧!
![54939dcc53901e13f6145268385699c0.png](https://img-blog.csdnimg.cn/img_convert/54939dcc53901e13f6145268385699c0.png)
看来运气不太好,只抽到了原皮……