用Python爬取王者荣耀英雄皮肤海报图

介绍

在某平台公开课上学了怎么用python爬取王者的全英雄皮肤海报图,然后自己敲了一遍,发现还不错,把图片全部都爬取下来了,本来想用来做壁纸,但是一看,实在太丑,然后。。然后就不知道这些图片能干啥了。现在就来分享一些爬取王者海报图的思路。

思路

1,确定爬取的url路径

2,发送请求,一般需要模拟浏览器发送,需要用到 requests

3,解析数据,需要用json模块,json模块可以把json字符串转换换成Python可交互的数据

4,保存数据

开始

第一步

确定爬取的url路径

1
2
#在王者官网打开检查
base_url = 'https://pvp.qq.com/web201605/js/herolist.json'

第二步

模拟浏览器发送请求 这里要用到requests 获取响应数据

1
2
response = requests.get(base_url)
data_str = response.text #--字符串

第三步

解析数据,要用到json模块,json模块可以把 json字符串转化成python可交互的数据类型,

1,转换数据类型

1
data_list = json.loads(data_str) 

2,解析数据

1
2
3
4
5
6
7
8
9
10
11
12
13
for data in data_list:
# 提取图片所需参数
ename = data['ename'] # 英雄编号
cname = data['cname'] # 英雄名字
try:
skin_name = data['skin_name'].split('|') # 切割皮肤的名字,用于计算每个英雄有多少个皮肤
except Exception as e:
print(e)

# http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/524/524-bigskin-1.jpg
#这是其中一个图片的url
# http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/ + 英雄编号 + "/" + 英雄编号-bigskin-皮肤序号 + ".jpg"
#这是图片url的格式

3,构建皮肤数量循环(使用for循环)

1
2
3
for skin_num in range(1, len(skin_name) + 1):
skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(ename) + '/' + str(
ename) + '-bigskin-' + str(skin_num) + '.jpg'

4,请求图片数据

1
skin_data = requests.get(skin_url).content

第四步

保存数据

1
2
3
with open('img\\' + cname + "-" + skin_name[skin_num - 1] + '.jpg', 'wb') as f:
print('正在下载皮肤:', cname + "-" + skin_name[skin_num - 1])
f.write(skin_data)

到这里就差不多结束了

完整代码

下面是一个完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
base_url = 'https://pvp.qq.com/web201605/js/herolist.json'
response = requests.get(base_url)
data_str = response.text
data_list = json.loads(data_str)
for data in data_list:
ename = data['ename'] # 英雄编号
cname = data['cname'] # 英雄名字
try:
skin_name = data['skin_name'].split('|')
except Exception as e:
print(e)
for skin_num in range(1, len(skin_name) + 1):
skin_url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(ename) + '/' + str(
ename) + '-bigskin-' + str(skin_num) + '.jpg'
skin_data = requests.get(skin_url).content
with open('img\\' + cname + "-" + skin_name[skin_num - 1] + '.jpg', 'wb') as f:
print('正在下载皮肤:', cname + "-" + skin_name[skin_num - 1])
f.write(skin_data)

注意:要在目录下新建一个img的文件夹


转送门