引言

王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了。我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成。

准备工作

爬取皮肤本身并不难,难点在于分析,我们首先得得到皮肤图片的url地址,话不多说,我们马上来到王者荣耀的官网:

我们点击英雄资料,然后随意地选择一位英雄,接着F12打开调试台,找到英雄原皮肤的图片地址:

接着,我们切换一下英雄的皮肤,会发现图片地址没有明显的变化,只是最后的数字序号改变了,我们将两个皮肤图片的地址放在一起比较一下:

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-1.jpg

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/523/523-bigskin-2.jpg

我们可以猜测,对于同一个英雄的皮肤图片地址,仅仅是最后的数字序号不同,为了证实我们的猜想,我们可以继续找出一个英雄的全皮肤图片,找一个皮肤多一点的,例如我这里找的是孙尚香,将它的所有皮肤图片地址放在一起比较:

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-1.jpg

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-2.jpg

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-3.jpg

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-4.jpg

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-5.jpg

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-6.jpg

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/111/111-bigskin-7.jpg

由此我们得出结论,同一个英雄的皮肤图片路径从1开始依次递增,我们再来看看不同英雄之间是如何区分的。会发现,不管皮肤图片如何改变,浏览器上方的地址始终是不变的,所以我们将两个不同英雄的url地址放到一起比较一下:

https://pvp.qq.com/web201605/herodetail/523.shtml

https://pvp.qq.com/web201605/herodetail/111.shtml

乍一看,似乎没有什么规律,但我们要从这里发现一点,就是最后的数字其实控制的是哪个英雄,我们暂且认为它是英雄的编号,可不幸的是,英雄编号之间好像没有什么规律,不用着急,我们再到官网上找找线索。

在英雄资料界面,我们打开F12调试台,通过抓取网络请求,我发现了几个文件:

点击网络,然后点击XHR,就可以看到这几个文件,看到文件的名字大家应该就清楚了,这些文件存储的就是英雄列表信息,我们点击查看一下:

没错,这里存储的就是英雄信息,包括英雄的名字,英雄编号等等其它信息,我们可以试试这些信息的准确性,例如小乔的ename,也就是英雄编号为106,所以按照之前的想法,英雄小乔的详情地址应为:王者荣耀小乔-王者荣耀官网网站-腾讯游戏

经过尝试后发现确实如此。

到这里,准备工作就完成了,其实进行到这里,整个工程就完成了一半了,接下来就是代码的实现了。

代码实现

首先我们创建一个Python文件,然后导入os和requests模块。

那么我们首先就要通过这个地址获取到英雄列表信息的json数据,然后解析json数据,将有用的信息提取出来:

url = 'https://pvp.qq.com/web201605/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地址即可:

http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + hero_number + '/' + hero_number + '-bigskin-1.jpg,这样可以获取到所有英雄的皮肤图片了,但是这里会有一个问题,英雄的皮肤是有多有少的,有的英雄只有两个皮肤,有的却有六七个,所以图片编号的最大值我们并不清楚,这里我采用了一个比较笨的办法,就是让一个变量从1到10依次递增去拼接图片地址,如果遇到没有的图片我们就不处理,因为没有一个英雄的皮肤超过了10个,所以我们就能获取到所有的图片了。下面看代码实现:

# 下载图片

def downloadPic():

i = 0

for j in hero_number:

# 创建文件夹

os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])

# 进入创建好的文件夹

os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])

i += 1

for k in range(10):

# 拼接url

onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(

j) + '-bigskin-' + str(k) + '.jpg'

im = requests.get(onehero_link) # 请求url

if im.status_code == 200:

open(str(k) + '.jpg', 'wb').write(im.content) # 写入文件

实现非常地简单,代码注释也已经写得很清楚了,有了这个函数之后,我们只需调用一下,就可以下载图片了,整个程序的完整代码如下:

import os

import requests

url = 'https://pvp.qq.com/web201605/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())) # 提取英雄的编号

# 下载图片

def downloadPic():

i = 0

for j in hero_number:

# 创建文件夹

os.mkdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])

# 进入创建好的文件夹

os.chdir("C:\\Users\\Administrator\\Desktop\\wzry\\" + hero_name[i])

i += 1

for k in range(10):

# 拼接url

onehero_link = 'http://game.gtimg.cn/images/yxzj/img201606/skin/hero-info/' + str(j) + '/' + str(

j) + '-bigskin-' + str(k) + '.jpg'

im = requests.get(onehero_link) # 请求url

if im.status_code == 200:

open(str(k) + '.jpg', 'wb').write(im.content) # 写入文件

downloadPic()

除去注释,接近20行的代码我们就完成了王者荣耀全英雄皮肤的爬取,是不是非常简单呢?我们可以测试一下这个程序,首先要在桌面上创建一个文件夹,名为wzry,因为这里的代码我已经写死了,如果要修改的话大家也可以进行修改,文件夹创建完成后点击运行即可,等待片刻,图片就全部下载完成了。

对于程序中json字符串的解析,我们还可以使用jsonpath模块来进行,使用该模块能够更加快捷地获取到我们想要的信息,解析方式如下:

hero_name = jsonpath.jsonpath(html_json, "$..cname")

hero_number = jsonpath.jsonpath(html_json, "$..ename")

该方法接收一个json字符串和解析规则,$…cname则表示从根目录下找寻任意位置的以cname为键的值,并放入字典中。

结尾

爬虫是非常有趣的,因为它非常直观,视觉冲击感强,写出来也很有成就感,爬虫虽然强大,但千万不能随意爬取隐私信息。

最后,如果对文中程序有更好的建议,欢迎到python开发IT交流群:887934385 讨论、其中提供素材及相关视频

python爬取和平精英皮肤_20行Python代码爬取王者荣耀全英雄皮肤相关推荐

  1. python玩王者荣耀皮肤碎片怎么获得_教你用Python代码免费获取王者荣耀全英雄皮肤...

    本篇推文共计3000个字,阅读时间约3分钟. 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为当下最火的手机游戏, 我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即 ...

  2. 教你用Python代码免费获取王者荣耀全英雄皮肤

    本篇推文共计3000个字,阅读时间约3分钟. 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为当下最火的手机游戏,我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可 ...

  3. 20行 Python 代码爬取王者荣耀全英雄皮肤 | 原力计划

    作者 | wangweijun 责编 | Elle 出品 | CSDN 博客 引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王 ...

  4. 20行Python代码爬取王者荣耀全英雄皮肤改进版

    0 写在前面 看了大神的这篇CSDN:20行Python代码爬取王者荣耀全英雄皮肤访问量那么高,忍不住想要蹭一下热点,但是蹭归蹭,总得有点货才行,于是我品我细品,发现其代码总体有三点我觉得值得改进的地 ...

  5. [转载]20行Python代码爬取王者荣耀全英雄皮肤

    20行Python代码爬取王者荣耀全英雄皮肤,这是高手.原文链接: https://blog.csdn.net/qq_42453117/article/details/103190981 除了语言学习 ...

  6. python 20行代码爬取王者荣耀全英雄皮肤

    引言 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成. 准备工 ...

  7. 如何运用python爬游戏皮肤_Python爬虫练习:20行Python代码爬取王者荣耀全英雄皮肤...

    引言王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成. 准备工作 ...

  8. python爬虫脚本 初级入门爬虫英雄联盟所有皮肤_Python爬虫练习:20行Python代码爬取王者荣耀全英雄皮肤...

    引言王者荣耀大家都玩过吧,没玩过的也应该听说过,作为时下最火的手机MOBA游戏,咳咳,好像跑题了.我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即可完成. 准备工作 ...

  9. python 如何爬取王者荣耀全英雄皮肤

    如何爬取王者荣耀全皮肤英雄壁纸 知道我们的目的 先来看成果吧! 我们的目的需要很明确,我们要做什么,我们要干什么,如何做,在什么地方做. 我们的目的:爬取王者荣耀全英雄皮肤壁纸. 在什么地方:王者荣耀 ...

最新文章

  1. selenium+Python(鼠标和键盘事件)
  2. LeetCode Python题解(二)----排序
  3. 模型加速--Slimmable neural networks
  4. SQLServer出现 '其他会话正在使用事务的上下文' 的问题原因,什么是环回链接服务器?(转载)...
  5. JQuery--事件
  6. 27岁姑娘,去世前一天,留给世界这封信,看哭众多网友
  7. VS2008开发Windows Mobile6环境搭建及模拟器联网问题图解
  8. 脉冲波形对uwb的影响matlab仿真,DS-UWB系统信号的产生及MATLAB仿真
  9. 确认!聚划算百亿补贴要向iPad 8等新品下手,这次是真的刚刚好
  10. 理想制动力分配曲线matlab源代码_宝马进入“血拼”状态,动力倍儿棒
  11. table中加表单元素怎么验证_el-table嵌入表单元素注意事项(验证规则prop写法与数据初始化)...
  12. 自定义微信小程序导航(兼容各种手机)
  13. EP100底层封装-LibCreateSourceFile()函数
  14. Axure中级教程:管理后台内容模板(中继器全交互详解)
  15. 响应式布局基础知识详解
  16. 是时候使用Markdown写作了
  17. 人工智能在实体零售行业,主要的应用场景是什么?
  18. android手机整体规模,2021年Android手机市场规模
  19. 怎么测试Tomcat是否安装配置成功
  20. python中的位运算符

热门文章

  1. Gps信息转国内谷歌地图和高德地图
  2. 关于kindeditor富文本编辑的上传图片、音频、和视频的使用
  3. pdf中的图片倒过来了,解决办法
  4. 您遇到过网页抓取时被封IP的情况吗?
  5. MySQL分组统计及占比分析的方法实现
  6. web前端入门到实战:16个网页设计趋势,你都有知道吗?
  7. 最新Android面试题整理,全套教学资料
  8. ChatGPT论文降重:从97%到5%
  9. Android RIL 调试分析全记录 No APN found for carrier
  10. 书单推荐(持续更新中)