小三:“怎么了小二?一副垂头丧气的样子!”
小二:“唉!别提了,还不是最近又接触了一个叫英雄联盟的游戏,游戏中很多皮肤都须要花钱买,然而我钱不够呀 …”
小三:“咋得,钱攒够了你还要买呀?还吃不吃饭了?!要我说,你罗唆将英雄的炫彩皮肤都爬下来观赏一下得了,饭钱还给你省下了。”
小二:“你说的也对,毕竟吃饭更重要,那我还是爬取皮肤观赏一下算了。”
首先,咱们关上英雄联盟官网主页,网址为:https://lol.qq.com/main.shtml
,而后向下拉,能够看到英雄列表,如图所示:
接着随便选一个英雄点击进入看一下,如图所示:
再点击鼠标右键,接着抉择 查看
,看一下皮肤的 URL,如图所示:
通过观察,能够发现英雄皮肤 URL 组成形式为:https://game.gtimg.cn/images/lol/act/img/skin/big + 英雄 id + 皮肤 id.jpg
。
咱们先看 皮肤 id
,也就是看皮肤的个数,抉择开发者工具的 Network
项,之后刷新一下页面,能够发现有一个 17.js
的申请,17
理论就是 英雄 id
,如图所示:
再抉择 Response
项看一下相应数据,如图所示:
咱们能够看到数据都显示在了一行,看着不太不便,咱们将其格式化看一下,如图所示:
通过观察,能够发现获取指定英雄 皮肤 id
的 URL 就是:https://game.gtimg.cn/images/lol/act/img/js/hero/ + 英雄 id.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).text
skin_json = json.loads(skin_text)
skin_list = skin_json['skins']
# 获取皮肤名
hero_skins.clear()
for skin in skin_list:
hero_skins.append(skin['name'].replace('/', '').replace('\\','').replace('',''))
# 皮肤数量
skins_num = len(hero_skins)
s = ''for i in tqdm(range(skins_num), desc='【'+ hero_name +'】皮肤下载 '):
if len(str(i)) == 1:
s = '00' + str(i)
elif len(str(i)) == 2:
s = '0' + str(i)
elif len(str(i)) == 3:
pass
try:
# 拼接指定皮肤的 url
skin_url = 'https://game.gtimg.cn/images/lol/act/img/skin/big' + hero_id + ''+ s +'.jpg'
img = requests.get(skin_url)
except:
# 没有炫彩皮肤 url 则跳过
continue
# 保留皮肤图片
if img.status_code == 200:
with open(hero_skins[i] + '.jpg', 'wb') as f:
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')
# 遍历列表
for hero in hero_json:
# 将每一个英雄的 id、name 放入一个字典中
hero_dict = {'id': hero['heroId'], 'name': hero['name']}
# 放入列表
heros.append(hero_dict)
咱们能够看出:代码中除了 英雄 id
,还获取了 英雄 name
,并将每一个英雄的 id
、name
放在了一个字典中,又将所有英雄对应的字典放在了列表中。
最初,咱们看一下下载成果:
源码在公众号 Python 小二 后盾回复 201130 获取。