哈喽吖!铁汁们。王者荣耀这款手游,想必大家都玩过或听过,虽已运营7年,但热度依然不减当年,各种英雄配上各式各样的皮肤,甚是精美,
今天就教大家如何利用几行Python代码爬取王者荣耀全套皮肤~~
首先打开王者荣耀官网,点击英雄资料:
F12查看网页源码,可以看到所有英雄都在一个无序列表(
任意选择一个英雄,这里我们选择孙悟空,进入到详情页中,F12查看网页源码,点击每个皮肤(这里点击前4个),我们可以看到在Network中出现了“167-bigskin-5.jpg”、“167-bigskin-6.jpg”、“167-bigskin-7.jpg”、“167-bigskin-8.jpg”四个图片文件:
分析得出167是.shtml链接的英雄编号,5/6/7/8依次对应前四个皮肤:
这样就完了吗?
坑已备好,You jump? I jump!!!
这里有没有注意到一个问题,要获取最终的英雄皮肤,需要知道两个关键参数英雄编号和皮肤编号,英雄编号在首页可以获取,但是每个英雄具体有几个皮肤我们并不知道,怎么办
带着这个疑问,我们往下走...
英雄请求,分析请求链接:
http://pvp.qq.com/web201605/js/herolist.json
细心的朋友会注意到网页返回数据中cname/skin_name/title是乱码,初步怀疑有可能是网页编码格式的问题,我们看一下返回的网页编码:
果然没错,Response Headers中的content-encoding编码是gzip,我们构造请求在pycharm中运行看一下,代码如下:
# 导入模块
import requests
# 获取网页数据
url = 'http://pvp.qq.com/web201605/js/herolist.json'
# 添加请求头
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36 QIHU 360SE'}
# 发送网页请求
r = requests.get(url, headers=headers)
hero_list = r.json()
print(hero_list)
请求返回编码“utf-8”,我们直接打印出返回信息:
返回信息还有意外收获,ename(英雄编号)、skin_name(皮肤名称),有了皮肤名称不就相当于有了皮肤编号吗,香不香!!!
数据解析,主要获取ename/skin_name:
for hero in range(len(hero_list)):
try:
# 英雄编号
hero_num = hero_list[hero]['ename']
# 英雄名称
hero_name = hero_list[hero]['cname']
# 皮肤列表
skin_name = hero_list[hero]['skin_name'].split('|')
# 统计皮肤数量
skin_count = len(skin_name)
print('英雄名称:',hero_name,' 皮肤数量:',skin_count)
except:
print('获取英雄信息异常!')
continue
遍历皮肤链接,请求皮肤:
# 遍历每一个英雄获取皮肤图片
for i in range(1, skin_count + 1):
try:
# 皮肤网址
url = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/{}/{}-bigskin-{}.jpg'.format(hero_num,hero_num,i)
# 获取图片信息
picture = requests.get(url).content
except:
print('获取皮肤异常!')
continue
在代码路径下新建pictures文件夹:
with open('pictures/{}-{}.jpg'.format(hero_name,skin_name[i - 1]), 'wb') as f:
f.write(picture)
结果如下:
以上就是本期为大家整理的全部内容了,喜欢的朋友可赶快练习起来吧!记得给小编三连噢!
想要领取完整源码跟Python学习资料可点击这行字体