目标

对于我来说,学习新英雄的第一件事便是查看其技能描述。因此,我相信技能描述的文本量对于一个英雄的上手难度有着不小的影响。
因此,我希望能统计出王者荣耀里所有英雄的技能描述文本量,并对其排序,这样也许对自己练新英雄有参考作用。

当然,此排序只是客观的统计,不具有专业的指导作用。

基本思路

在官网中,可以找到每个英雄的介绍页面,其中有技能介绍文本:

我的思路是:

  1. 保存官网上每个英雄的介绍页面到本地。
  2. 找到技能描述的文本并统计其数字。

当然,王者荣耀当前已经有一百多个英雄了,手动做这件事会很累且容易出错,肯定要借助编程的方法,我这里选择了python做这件事。

1. 找到英雄介绍页面地址列表

(此处我使用windows自带的Edge浏览器,用其他浏览器我发现保存的网页源代码会有差异)

打开官网找到英雄列表:

使用浏览器ctrl+S将网页保存到本地herolist.html,再用文本形式打开它,可以看到每个英雄的介绍页面地址:

2. 解析出英雄介绍页面地址列表

上一步得到的信息还是html格式,为了能在接下来方便使用,还需要处理一下。

首先,是将这个<div class="herolist-content">节点拷贝到一个新的文件heropages.xml,因为只有这部分的信息是感兴趣的。

另外还有个问题是,我用来解析信息的库是python的xml库,xml的语法和html语法稍有些不同。例如这里出现的<img>标签(详见HTML img 标签)在html中没有标签结束的符号,这会让我在将他解析为xml的时候出问题。为此我这里用了一个“歪招”:使用文本替换的方式在合适的位置补上 img 的结束标签:

接下来,就可以将其当作正确的xml来解析了,python代码如下:(此处主要参考了《python ElementTree模块使用详情》)

import xml.etree.ElementTree as ET
tree = ET.parse("D:/Temp/heropages.xml")
node_ul = tree.find("ul")
nodes_heros = node_ul.findall("li")
for node_hero in nodes_heros:node_a = node_hero.find("a")node_img = node_a.find("img")pageLink = node_a.get("href")print(node_img.text)print(pageLink)

运行后可以看到地址列表被正确解析出来:

3. 保存所有英雄介绍页面到本地

接下来,就可以抓取所有英雄的介绍页面并保存到本地了,代码如下:(保存网页的代码主要参考了《两种通过urllib抓取并保存本地的方式》)

import xml.etree.ElementTree as ET
import urllib.requesttree = ET.parse("D:/Temp/heropages.xml")
node_ul = tree.find("ul")
nodes_heros = node_ul.findall("li")
for node_hero in nodes_heros:node_a = node_hero.find("a")node_img = node_a.find("img")pageLink = node_a.get("href")page = urllib.request.urlopen(pageLink)file = open ('D:/Temp/heros/'+node_img.text+'.html','wb')file.write(page.read())file.close()

随后可以看到所有网页都被保存到了本地:

4. 解析出英雄的技能描述文本

打开上一步中得到的英雄介绍页面的源代码,就可以看到我们想要的信息:

只不过还是会遇到在第2步遇到的问题——使用xml来解析html会有问题。
此时再用当时的歪招的话会很麻烦,所以我不得不用更正确的方式了。

我查到lxml可以用来解析html,因此安装了这个库

pip3 install lxml

(这里主要参考了《爬虫之 lxml模块的安装与使用示例》)
读取一个英雄的技能文本的代码如下,主要就是找到classskill-descp节点:

from lxml import etreewith open('D:/Temp/heros/百里守约.html', 'r') as f:tree = etree.HTML(f.read()) skills = tree.xpath("//p[@class='skill-desc']")for skill in skills:print(skill.text)print('\n')

运行后结果如下:

5. 统计王者荣耀里所有英雄的技能描述文本量

接下来,就是遍历所有英雄并统计其文本量了,代码如下:

from lxml import etree
import osheros  = os.listdir('D:/Temp/heros/')
for hero in heros:with open('D:/Temp/heros/'+hero, 'r') as f:tree = etree.HTML(f.read()) skills = tree.xpath("//p[@class='skill-desc']")skill_text_number = 0      for skill in skills:if(skill.text):skill_text_number += len(skill.text)print(hero.strip(".html")+','+str(skill_text_number))

运行后输出结果:

6. 排序

将上一步输出的结果保存到一个文本里(需要改成ASCII编码)并将后缀改为.csv即可通过Excel打开。
之后,就可以在Excel中对其排序了,最后结果如下:

项目 Value
妲己 233
韩信 318
小乔 326
335
程咬金 337
亚瑟 343
公孙离 345
橘右京 356
貂蝉 358
庄周 363
艾琳 368
牛魔 370
曹操 380
典韦 383
露娜 384
嬴政 389
甄姬 396
墨子 397
蔡文姬 398
金蝉 398
赵云 401
孙膑 406
刘禅 411
夏洛特 417
白起 418
钟无艳 424
鲁班七号 424
虞姬 425
哪吒 428
姜子牙 428
后羿 429
武则天 429
大乔 432
不知火舞 435
孙悟空 439
鲁班大师 452
孙尚香 456
黄忠 456
安琪拉 457
兰陵王 459
马可波罗 462
花木兰 472
关羽 473
刘备 474
宫本武藏 479
云中君 486
项羽 487
司空震 491
高渐离 491
老夫子 500
501
西施 502
李白 511
狄仁杰 511
娜可露露 512
梦奇 515
钟馗 517
成吉思汗 519
阿轲 521
雅典娜 521
杨玉环 525
夏侯惇 526
达摩 529
张飞 530
王昭君 530
扁鹊 539
廉颇 545
伽罗 547
553
张良 557
百里守约 560
563
桑启 569
盾山 575
577
杨戬 578
东皇太一 579
吕布 581
干将莫邪 582
刘邦 584
猪八戒 591
李元芳 602
太乙真人 603
诸葛亮 619
周瑜 621
嫦娥 628
鬼谷子 631
司马懿 649
孙策 650
女娲 654
百里玄策 681
上官婉儿 686
689
阿古朵 704
云缨 706
芈月 707
蒙恬 708
明世隐 723
马超 729
沈梦溪 766
苏烈 806
狂铁 820
蒙犽 855
裴擒虎 874
弈星 897
米莱狄 898
元歌 961
盘古 1109
李信 1149

用python统计王者荣耀里所有英雄的技能描述文本量并排序相关推荐

  1. java给英雄加血,王者荣耀里能给队友加血的英雄你能想到几个?

    原标题:王者荣耀里能给队友加血的英雄你能想到几个? 大家好,在王者荣耀里,能够给队友回血英雄前期会有一定的小优势,你所熟悉的英雄中你能想到几个呢?小杰今天就来和大家聊一聊王者荣耀里能奶人的英雄有哪些. ...

  2. 手机写python脚本_用Python写王者荣耀刷金币脚本

    王者荣耀很多朋友都想买脚本和挂之类的,想更加容易的获得金币等可以在游戏里买英雄等,今天我们发挥程序员的优势教给大家用Python语言自己写一个可以刷金币的脚本,以下是全部内容. 王者荣耀的冒险模式里有 ...

  3. 挑战纯python写王者荣耀,开lou!

    挑战用纯python写一个王者荣耀小游戏? 信不信点进来看!小白们快来,你们也行!我就不信你不笑,快跟我来! 这里是文章要用到的所有东西,需要的同学自取一下,直接可以用:用Python写王者荣耀,源码 ...

  4. Python实现王者荣耀模拟抽水晶

    Python实现王者荣耀模拟抽水晶 本文使用Python3.6 *概率参考:王者荣耀官网概率公示 由于王者荣耀没有公布幸运值的加成和在表格里玩的一些文字游戏,导致有些数据我只能靠多次测试估摸出来一个数 ...

  5. queryselectorall 怎么取name_用这个方法,我爬取了《王者荣耀》《英雄联盟》等游戏皮肤图片...

    本文简介:本文使用Python制作爬虫,来爬取<英雄联盟><王者荣耀><神之浩劫>等游戏官方网站的英雄皮肤图片.可以作为新手爬虫的练手实战案例!! 爱打游戏的各位肯 ...

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

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

  7. Python爬虫——王者荣耀全皮肤拉取

    文章目录 Python爬虫--王者荣耀全皮肤拉取 资源地址 HeroScrapy.py 运行上面的代码即可 注意点 Python爬虫--王者荣耀全皮肤拉取 开门见山,话不多说 资源地址 英雄信息列表: ...

  8. 【python】王者荣耀全英雄高清壁纸爬虫共467M(多线程)

    文章目录 1. 成果展示 2. 单张预览 3. 软件下载 4. 壁纸下载 5. 进度打印 6. 目标网址 7. 依赖模块 8. 完整代码 9. 代码剖析 10. 打包教程 10.1. 打包前的准备 1 ...

  9. 王者英雄胜率用计算机怎么算,王者荣耀征召局英雄胜率怎么计算

    标签: 后羿 王者荣耀征召局英雄胜率怎么计算 王者荣耀征召局英雄胜率怎么算?然而谁能知道这个关键比例啊,助手里面排位赛只有两个数据,一个胜率,一个出场率,出场率只能让我知道这个英雄多不多人玩而已.下面 ...

最新文章

  1. FatNet:一个用于三维点云处理的特征关注网络
  2. Potala(3)——Transaction
  3. linux命令编写四位数密码本,grub-crypt命令 – 对口令进行加密
  4. 0 重新学习Ubuntu -- 这一段没怎么学习
  5. jzoj6344-[NOIP2019模拟2019.9.7]Huge Counting【组合数,状压dp】
  6. 大数据项目交付国标_在紧迫的期限内交付大型项目
  7. c语言error和,C语言ERROR精选.doc
  8. PHP 获取服务器详细信息
  9. jquery 访问.ashx ashx取所传参数的值
  10. 洛谷 P1426 小鱼会有危险吗(C语言)
  11. 如何才能精通C++?原来这点才最重要!
  12. 用VC++封装自己的DLL动态链接库
  13. VS2015社区版使用Visual Studio Installer打包
  14. 人脸识别与膜虹识别_虹膜识别技术优势明显 比指纹、人脸识别更可靠
  15. TSE2019-The Art, Science, and Engineering of Fuzzing: A Survey
  16. ELK企业应用-ekl快速搭建-kibana
  17. 我写的新闻——Adobe校园行西工大站圆满落幕
  18. html5学习笔记——三、图文展示网页设计
  19. Windows环境下查看进程和杀死进程的命令
  20. java int溢出,结果只会保留低32位,高位会抛弃掉

热门文章

  1. 路由器品牌排行榜前十名(家用路由器排名前十名)
  2. Hadoop集群启动Hbase的步骤流程
  3. 从破解某设计网站谈前端水印(详细教程)
  4. 【iOS】Instruments性能检测之耗电优化
  5. 桌面动画 - 雪花和兔子
  6. 红色巨人的崛起和衰弱
  7. 共享奢侈品平台潜力大 但真正要规模化赚钱还远着呢!
  8. 追求极致的匠心:ThinkPad X280商用本评测体验
  9. python普通人有学习的必要吗?
  10. supermap 配图切图比例尺设置