首页 > 搜索 > 王者荣耀英雄文件夹,Python爬虫基础练习(五) 王者荣耀皮肤爬取

王者荣耀英雄文件夹,Python爬虫基础练习(五) 王者荣耀皮肤爬取

互联网 2021-06-13 08:00:49

爬过那么多文字信息之后,今天我们来尝试一下图片的爬取。今天要做的是利用简单的requests请求爬取王者荣耀的皮肤图片。虽然刚刚卸载了王者荣耀,不过爬取皮肤图片还是可以的啊(不是因为太菜才卸载的,也是上过王者的召唤师,口亨˃̣̣̥᷄⌓˂̣̣̥᷅)

运行平台:Windows

Python版本:Python3.6

IDE:Sublime TextPython自带IDLE

其他:Chrome浏览器

简述流程为:

步骤1:利用开发者工具查找英雄列表以及图片链接

步骤2:从网页中获取相关信息

步骤3:利用os模块创建保存图片的文件夹

步骤4:爬取图片并保存

我们打开王者荣耀官网,找到英雄资料。

然后可以看到一系列英雄列表。我们就选择新英雄米莱狄吧,话说因为刚卸载了,所以我也没有玩过这个英雄。

打开链接后,F12+F5找到一张大图,图片名字为上图中选中的那个。然后我们右键复制链接

米莱狄 筑城者:https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/504/504-bigskin-1.jpg

可以再找几个链接,查看一下图片链接的规律。

狂铁 战车意志:https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/503/503-bigskin-1.jpg

奕星 天元之奕:https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/197/197-bigskin-1.jpg

奕星 踏雪寻梅:https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/197/197-bigskin-2.jpg

可以看到,主要区别在于后面的数字,这应该是英雄的编号,然后查看属于同一个英雄不同皮肤,会看到链接最后有不同标号。这个很容易理解,不同皮肤肯定有不同编号,至于中间的这个数字,我们等下获取英雄列表的时候再具体看下。

随后就是获取英雄列表了,按照之前爬取文字信息的方式的话,我们找不到英雄列表的具体信息,查看网页源代码也只能看到一列小头像的url和英雄名称,不能为我们提供编号等信息,那么这个列表信息在哪呢?我们在xhr处可以发现有个herolist.json的文件,我们将它下下来,然后浏览器打开,就可以看到这个里面有具体的英雄信息了。

因为是第一次接触到json文件,我们先来了解一下。JSON(JavaScript Object Notation)是一种数据交换格式,在JSON中,它们呈现如下形式:一个对象是一组无名的名称/值对。一个对象以 { (左大括号)开始并以 } (右大括号)结束。每个名称后面跟着 : (冒号)和名称/值对被分离的 %2c (逗号)。具体的json说明可以看下JSON介绍

从上图可以看到,"ename"对应的值就是英雄编号,"cname"即时英雄名称,"skin_name"就是对应的皮肤的名称,并且各个英雄的信息是用字典存储的,我们可以方便的提取出来。

你可能会发现你的界面和我显示得不一样,这里给大家推荐一个Chrome浏览器的插件,JSONView

如果没用这个插件的话,各种信息不会这样排列整齐,而是一行一行输出,就像用代码获取的那个格式(后面可见)。用这个插件后,简洁清晰,尤其在url信息繁多的时候,效果贼好!

相关的信息都已经分析好了,接下来就开始爬取图片并存储吧。

requests模块中提供了一个内置的json解码器,我们可以用它来处理请求得到的herolist.json文件。然后将其输出便可以看到浏览器中看到的json格式。

王者荣耀不知不觉也有80个英雄了啊。如果没有安装JSONView插件的话,从浏览器看到的就是上图这种格式了。如果信息中包含url时,这样显示就会显得很乱,所以再次推荐JSONView插件啦。

获取到英雄列表后便可以提取出各个英雄的相关信息了。

这里只是简单获取了廉颇的信息,获取全部英雄的话,用for循环就OK了。

这里使用os模块创建以英雄名称命名的文件夹,然后根据之前的链接规律用英雄编号构建要爬取的皮肤链接,最后写入文件即可。这里因为是图片文件,所以使用wb的写入方式,并且因为response.text返回的是Unicode数据,而response.content返回的是bytes型数据,所以我们这里使用response.content获取图片。

运行一下,看看成果吧。

大功告成,感觉挺OK的,代码如下

import requestsimport osimport timefile_dir = "D:/新建学习/王者荣耀皮肤/" # 存储图片的根目录url = 'https://pvp.qq.com/web201605/js/herolist.json'response = requests.get(url)herolist = response.json()hero_number = len(herolist)# print(hero_number)# print(herolist)# hero_code = herolist[0]['ename'] # 获取英雄编号# hero_name = herolist[0]['cname'] # 获取英雄名称# skin_name = herolist[0]['skin_name'].split('|') # 获取英雄皮肤列表# print(hero_name)# print(skin_name)for i in range(hero_number):# 获取英雄皮肤列表 hero_name = herolist[i]['cname']print(hero_name)# print(type(hero_name))skin_name = herolist[i]['skin_name'].split('|')hero_code = herolist[i]['ename'] # 获取英雄编号file = file_dir + hero_nameprint(file)if os.path.exists(file):os.chdir(file)else:os.mkdir(file) # 创建文件夹os.chdir(file) # 进入刚创建的文件夹 for j in range(len(skin_name)):file_name = hero_name + '-' + skin_name[j] + '.jpg' # 文件名称skin_url = 'https://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(hero_code) + '/' + str(hero_code) + '-bigskin-' + str(j+1) + '.jpg' response_skin = requests.get(skin_url)time.sleep(2)print(response_skin.status_code)if response_skin.status_code == 200:with open (file_name%2c'wb') as f: # 写入文件f.write(response_skin.content)

免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

一周热门

查看更多