用python统计王者荣耀里所有英雄的技能描述文本量并排序
目标
对于我来说,学习新英雄的第一件事便是查看其技能描述。因此,我相信技能描述的文本量对于一个英雄的上手难度有着不小的影响。
因此,我希望能统计出王者荣耀里所有英雄的技能描述文本量,并对其排序,这样也许对自己练新英雄有参考作用。
当然,此排序只是客观的统计,不具有专业的指导作用。
基本思路
在官网中,可以找到每个英雄的介绍页面,其中有技能介绍文本:
我的思路是:
- 保存官网上每个英雄的介绍页面到本地。
- 找到技能描述的文本并统计其数字。
当然,王者荣耀当前已经有一百多个英雄了,手动做这件事会很累且容易出错,肯定要借助编程的方法,我这里选择了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模块的安装与使用示例》)
读取一个英雄的技能文本的代码如下,主要就是找到class
为skill-desc
的p
节点:
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统计王者荣耀里所有英雄的技能描述文本量并排序相关推荐
- java给英雄加血,王者荣耀里能给队友加血的英雄你能想到几个?
原标题:王者荣耀里能给队友加血的英雄你能想到几个? 大家好,在王者荣耀里,能够给队友回血英雄前期会有一定的小优势,你所熟悉的英雄中你能想到几个呢?小杰今天就来和大家聊一聊王者荣耀里能奶人的英雄有哪些. ...
- 手机写python脚本_用Python写王者荣耀刷金币脚本
王者荣耀很多朋友都想买脚本和挂之类的,想更加容易的获得金币等可以在游戏里买英雄等,今天我们发挥程序员的优势教给大家用Python语言自己写一个可以刷金币的脚本,以下是全部内容. 王者荣耀的冒险模式里有 ...
- 挑战纯python写王者荣耀,开lou!
挑战用纯python写一个王者荣耀小游戏? 信不信点进来看!小白们快来,你们也行!我就不信你不笑,快跟我来! 这里是文章要用到的所有东西,需要的同学自取一下,直接可以用:用Python写王者荣耀,源码 ...
- Python实现王者荣耀模拟抽水晶
Python实现王者荣耀模拟抽水晶 本文使用Python3.6 *概率参考:王者荣耀官网概率公示 由于王者荣耀没有公布幸运值的加成和在表格里玩的一些文字游戏,导致有些数据我只能靠多次测试估摸出来一个数 ...
- queryselectorall 怎么取name_用这个方法,我爬取了《王者荣耀》《英雄联盟》等游戏皮肤图片...
本文简介:本文使用Python制作爬虫,来爬取<英雄联盟><王者荣耀><神之浩劫>等游戏官方网站的英雄皮肤图片.可以作为新手爬虫的练手实战案例!! 爱打游戏的各位肯 ...
- python玩王者荣耀皮肤碎片怎么获得_教你用Python代码免费获取王者荣耀全英雄皮肤...
本篇推文共计3000个字,阅读时间约3分钟. 王者荣耀大家都玩过吧,没玩过的也应该听说过,作为当下最火的手机游戏, 我们今天的重点是爬取王者荣耀所有英雄的所有皮肤,而且仅仅使用20行Python代码即 ...
- Python爬虫——王者荣耀全皮肤拉取
文章目录 Python爬虫--王者荣耀全皮肤拉取 资源地址 HeroScrapy.py 运行上面的代码即可 注意点 Python爬虫--王者荣耀全皮肤拉取 开门见山,话不多说 资源地址 英雄信息列表: ...
- 【python】王者荣耀全英雄高清壁纸爬虫共467M(多线程)
文章目录 1. 成果展示 2. 单张预览 3. 软件下载 4. 壁纸下载 5. 进度打印 6. 目标网址 7. 依赖模块 8. 完整代码 9. 代码剖析 10. 打包教程 10.1. 打包前的准备 1 ...
- 王者英雄胜率用计算机怎么算,王者荣耀征召局英雄胜率怎么计算
标签: 后羿 王者荣耀征召局英雄胜率怎么计算 王者荣耀征召局英雄胜率怎么算?然而谁能知道这个关键比例啊,助手里面排位赛只有两个数据,一个胜率,一个出场率,出场率只能让我知道这个英雄多不多人玩而已.下面 ...
最新文章
- FatNet:一个用于三维点云处理的特征关注网络
- Potala(3)——Transaction
- linux命令编写四位数密码本,grub-crypt命令 – 对口令进行加密
- 0 重新学习Ubuntu -- 这一段没怎么学习
- jzoj6344-[NOIP2019模拟2019.9.7]Huge Counting【组合数,状压dp】
- 大数据项目交付国标_在紧迫的期限内交付大型项目
- c语言error和,C语言ERROR精选.doc
- PHP 获取服务器详细信息
- jquery 访问.ashx ashx取所传参数的值
- 洛谷 P1426 小鱼会有危险吗(C语言)
- 如何才能精通C++?原来这点才最重要!
- 用VC++封装自己的DLL动态链接库
- VS2015社区版使用Visual Studio Installer打包
- 人脸识别与膜虹识别_虹膜识别技术优势明显 比指纹、人脸识别更可靠
- TSE2019-The Art, Science, and Engineering of Fuzzing: A Survey
- ELK企业应用-ekl快速搭建-kibana
- 我写的新闻——Adobe校园行西工大站圆满落幕
- html5学习笔记——三、图文展示网页设计
- Windows环境下查看进程和杀死进程的命令
- java int溢出,结果只会保留低32位,高位会抛弃掉