admin管理员组文章数量:1619183
Python爬取英雄联盟皮肤
打开英雄联盟官网:https://lol.qq,点击游戏资料,按F12进入开发者模式。刷新,找到hero_list.js,里面有我们需要的网址以及其他信息。
代码:
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}
base_url = 'https://game.gtimg/images/lol/act/img/js/heroList/hero_list.js'
response = requests.get(url=base_url, headers=headers)
data_list = response.json()
print(data_list)
结果:
从输出结果可以看出,这是一个json的数据类型,对我们有用的只有’hero’这个标签下的信息,只需要data_list = data_list[‘hero’]就可以了。
现在我们只需要将heroId提取出来即可
Id = []
for data in data_list:
heroId = data['heroId']
Id.append(heroId)
print(Id)
结果:
现在我们就得到了所有英雄的Id,随便点击一个英雄
可以看到,网址后面有一个id=115,这个id就是英雄的Id,进入开发者工具,找到对应的.js,这里就是115.js
就会得到一个新的url网址,并且在Preview中可以找到这个英雄的皮肤的Id,name等信息。接下来我们将对这个新的网址进行处理
# https://game.gtimg/images/lol/act/img/js/hero/115.js
for i in Id:
skin_url = 'https://game.gtimg/images/lol/act/img/js/hero/' + str(i) + '.js'
skin_list = requests.get(url=skin_url, headers=headers).json()
# print(skin_list)
skin_list = skin_list['skins']
for skin in skin_list:
img_url = skin['mainImg']
title = skins['heroTitle']
heroName = skins['heroName']
name = skins['name']
print('img_url')
这样我们就得到了所有英雄的皮肤的链接,接下来就是保存图片:
img_data = requests.get(url=img_url, headers=headers).content
img_file = './img/' + heroName + ' ' + title
if not os.path.exists(img_file):
os.mkdir(img_file)
with open(img_file + '/' + name + '.jpg', mode='wb') as f:
print('正在下载:', title + ' ' + name)
f.write(img_data)
但是这里会报错,就是找不到url链接,在前面打印img_url的时候可以看出,两个英雄的皮肤链接之间会有一大段的空行,这里只需要使用try except就不会报错了。
在下载过程中,还会遇到一些小问题。有些皮肤,比如KDA系列,它的皮肤名字中带有"/",下载的时候保存不了这种文件,需要对name进行处理,将其中的“/”替换成“”。
完整代码:
import os
import requests
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"}
base_url = 'https://game.gtimg/images/lol/act/img/js/heroList/hero_list.js'
response = requests.get(url=base_url, headers=headers)
data_list = response.json()['hero']
Id = []
for data in data_list:
heroId = data['heroId']
Id.append(heroId)
for i in Id:
hero_url = 'https://game.gtimg/images/lol/act/img/js/hero/' + str(i) + '.js'
skin_list = requests.get(url=hero_url, headers=headers).json()['skins']
for skin in skin_list:
title = skin['heroTitle']
img_url = skin['mainImg']
heroName = skin['heroName']
name = skin['name'].replace('/','')
try:
img_data = requests.get(url=img_url, headers=headers).content
img_file = './img/' + heroName + ' ' + title
if not os.path.exists(img_file):
os.mkdir(img_file)
with open(img_file + '/' + name + '.jpg', mode='wb') as f:
print('正在下载:', title + ' ' + name)
f.write(img_data)
except Exception as e:
pass
版权声明:本文标题:Python爬取英雄联盟全皮肤 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728792865a1173883.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论