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