本篇推文共计3000个字,阅读时间约3分钟。
王者荣耀大家都玩过吧,没玩过的也应该听说过,作为当下最火的手机游戏,
我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。
No.1
准备工作
爬取皮肤本身并不难,难点在于分析,我们首先要得到皮肤图片的url地址,我们先来到王者荣耀的官网:
图片来源:王者荣耀官网
点击
游戏资料
—>
英雄资料
,随机选取一个英雄,例如“
嫦娥
”。
图片来源:
王者荣耀官网
进入英雄皮肤页面,再按F12打开调试台,找到英雄原皮肤的图片地址:
图片来源:
王者荣耀官网
图片来源:
王者荣耀官网皮肤调试台
截取的嫦娥皮肤地址链接为:
/images/yxzj/img06/skin/hero-info/515/515-bigskin-3.jpg
接着,我们切换一下英雄的皮肤,会发现图片地址没有明显的变化,只是最后的数字序号改变了,我们根据上面同样操作,继续截取其它的嫦娥皮肤地址链接:
图片来源:王者荣耀官网皮肤调试台
截取的嫦娥
皮肤
地址链接为:
#嫦娥如梦令皮肤/images/yxzj/img06/skin/hero-info/515/515-bigskin-3.jpg#嫦娥露花倒影皮肤/images/yxzj/img06/skin/hero-info/515/515-bigskin-2.jpg#嫦娥寒月公主皮肤/images/yxzj/img06/skin/hero-info/515/515-bigskin-1.jpg
我们将同一个英雄三个皮肤图片的地址放在一起比较一下,
对于同一个英雄的皮肤图片地址,仅仅是最后的数字序号不同,
同一个英雄的皮肤图片路径从1开始依次递增。
图片来源:
王者荣耀官网后羿英雄链接
图片来源:
王者荣耀官网嫦娥英雄链接
紧接着分别点开“后羿”和“嫦娥”的英雄链接,对比网址链接,可以发现英雄的区别是后面网址链接的数字不同。
找到了不同英雄,以及同一英雄的不同皮肤的网址链接规律之后,我们就可以开始用代码实现功能了。
No.2
代码实现
首先我们创建一个Python文件,然后导入os和requests模块。
按照前面的步骤,我们首先需要获取到英雄列表信息,也就是herolist.json文件.
文件地址为:
/web05/js/herolist.json
这在调试台中可以找到。
图片来源:
王者荣耀官网英雄调试台
我们首先就要通过这个地址获取到英雄列表信息的json数据,然后解析json数据,将有用的信息提取出来:
url= '/web05/js/herolist.json'herolist= requests.get(url) # 获取英雄列表json文件herolist_json= herolist.json() # 转化为json格式hero_name= list(map(lambda x: x['cname'], herolist.json())) # 提取英雄的名字hero_number= list(map(lambda x: x['ename'], herolist.json())) # 提取英雄的编号
拿到了英雄编号之后,事情就变得很简单了,只需拼接一下url地址即可:
/images/yxzj/img06/skin/hero-info/' + hero_number + '/' + hero_number + '-bigskin-1.jpg
这样可以获取到所有英雄的皮肤图片了,但是这里会有一个问题,英雄的皮肤是有多有少的,有的英雄只有两个皮肤,有的却有六七个,所以图片编号的最大值我们并不清楚,这里我采用了一个比较笨的办法,就是让一个变量从1到10依次递增去拼接图片地址,如果遇到没有的图片我们就不处理,因为没有一个英雄的皮肤超过了10个,所以我们就能获取到所有的图片了。我们在桌面新建一个文件夹,命名为
wzry
,紧接着
下面看代码实现:
# 下载图片defdownloadPic():i = 0forj inhero_number:# 创建文件夹os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\"+ hero_name[i])# 进入创建好的文件夹os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\"+ hero_name[i])i += 1fork inrange(10):# 拼接urlonehero_link = '/images/yxzj/img06/skin/hero-info/'+ str(j) + '/'+ str(j) + '-bigskin-'+ str(k) + '.jpg'im = requests.get(onehero_link) # 请求urlifim.status_code == 200:open(str(k) + '.jpg', 'wb').write(im.content) # 写入文件
整个程序的完整代码如下:
importosimportrequestsurl = '/web05/js/herolist.json'herolist = requests.get(url) # 获取英雄列表json文件herolist_json = herolist.json() # 转化为json格式hero_name = list(map(lambdax: x['cname'], herolist.json())) # 提取英雄的名字hero_number = list(map(lambdax: x['ename'], herolist.json())) # 提取英雄的编号# 下载图片defdownloadPic():i = 0forj inhero_number:# 创建文件夹os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\"+ hero_name[i])# 进入创建好的文件夹os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\"+ hero_name[i])i += 1fork inrange(10):# 拼接urlonehero_link = '/images/yxzj/img06/skin/hero-info/'+ str(j) + '/'+ str(j) + '-bigskin-'+ str(k) + '.jpg'im = requests.get(onehero_link) # 请求urlifim.status_code == 200:open(str(k) + '.jpg', 'wb').write(im.content) # 写入文件downloadPic()
我们运行代码:
图片来源:Pycharm
在程序运行的同时,我们可以发现桌面上wzry文件夹里面已经陆续有很多英雄皮肤下载好了,并且归好了类别。
图片来源:wzry文件夹
图片来
源
:
wzry
文
件夹阿轲英雄皮肤
图片来
源
:
wzry
文
件夹嫦娥英雄皮肤
图片来源:wzry文件夹后羿英雄皮肤
程序不仅截取了每个英雄的不同皮肤,而且每个英雄皮肤都是高清晰度的,小伙伴们可以用来当壁纸。
图片来源:wzry文件夹后羿嫦娥如梦令皮肤
No.3
结语
Python爬虫是非常有趣的,因为它可以非常直观的爬取数据,用起来也很简便直接,帮助人们生产工作。
最后,提醒大家,爬虫虽然强大,但千万不能随意爬取隐私信息。
往期回顾