小三:“怎么了小二?你一脸无精打采的样子!”小二:“哦!别提了,不是因为我最近接触了一个叫英雄联盟的游戏吗?,游戏里很多皮肤都是需要钱买的,而我却没有足够的钱。..”小三:“怎么,钱够了还想买?还能吃吗?!要我说,你就用英雄爬下来欣赏五颜六色的皮,还有你可以省下饭钱。”小二:“你说的对,毕竟吃更重要,我就爬皮欣赏一下。”首先,我们打开英雄联盟官网的首页,网址是:https://lol.qq.com/main.shtml,然后往下拉,就可以看到英雄列表了,如图如图:然后随机选择一个英雄点击进入查看,如图:再次点击鼠标右键,然后选择勾选,查看皮肤的网址,如图图中:通过观察可以发现英雄皮肤URL的组成为:https://game.gtimg.cn/images/lol/act/img/skin/big+英雄id+皮肤id.jpg。我们先看皮肤id,也就是皮肤的个数,选择开发者工具的Network项,然后刷新页面,可以发现有17.js的请求,17其实就是英雄id,如图:然后在Response项中选择Lookatthecorrespondingdata,如图:我们可以看到数据是一行显示的,不方便看,我们格式化一下看看点它,如图:通过观察,我们可以发现获取到了指定英雄皮肤id的网址为:https://game.gtimg.cn/images/lol/act/img/js/hero/+heroid.js,获取皮肤id和下载皮肤图片的代码如下:hero_skin_url='https://game.gtimg.cn/images/lol/act/img/js/hero/'+hero_id+'.js'#通过url获取英雄皮肤编号skin_text=requests.get(hero_skin_url).textskin_json=json.loads(skin_text)skin_list=skin_json['skins']#获取skin_list中皮肤的皮肤名称hero_skins.clear():hero_skins.append(skin['name'].replace('/','').replace('\\','').replace('',''))#皮肤数量skins_num=len(hero_skins)s=''foriintqdm(range(skins_num),desc='【'+hero_name+'】皮肤下载'):iflen(str(i))==1:s='00'+str(i)eliflen(str(i))==2:s='0'+str(i)eliflen(str(i))==3:passtry:#拼接指定皮肤的urlskin_url='https://game.gtimg.cn/images/lol/act/img/skin/big'+hero_id+''+s+'.jpg'img=requests.get(skin_url)except:#如果没有彩色皮肤url则跳过continue#保存皮肤图像ifimg.status_code==200:withopen(hero_skins[i]+'.jpg','wb')asf:f.write(img.content)现在缺少获取英雄id参数,我们看看如何获??取所有英雄id,返回https://lol.qq.com/main.shtml页面,并打开开发工具选择Network,然后刷新页面,我们可以观察到有一个请求hero_list.js,如图:基本类似于皮肤id的获取,通过这个请求,所有英雄可以获取英雄的id,代码实现如下:url='https://game.gtimg.cn/images/lol/act/img/js/heroList/hero_list.js'hero_text=requests.get(url)。text#转换成json格式hero_json=json.loads(hero_text)['hero']path=os.getcwd()#获取当前文件夹路径workspace=os.getcwd()#皮肤路径skin_path="{}\\{}".format(workspace,'skins')#遍历hero_json中的hero列表:#将每个英雄的id和名称放入字典hero_dict={'id':hero['heroId'],'name':hero['name']}#将输入的listheroes.append(hero_dict),我们可以看到除了英雄id,代码还获取了英雄名字,并将每个英雄的id和名字放在一个字典中,将所有英雄对应的字典放在榜单最后,看一下下载效果:源码可在公众号Python小二后台回复201130获取。
