为了完成伟大的工作,有两样东西是必须的,一个计划以及已经不多的时间。 伦纳德·伯恩斯坦
大家好,我是今天的值班小编,python爱好者一枚,同时也是多年的武侠小说爱好者。
今天是正月初六了,要是按照往年的情况来看,小编应该是在回北京的火车上了;今年情况比较特殊,这几天一直宅在家里躺床上看小说。
话说小编从初中时开始看金庸低武,后来逐渐过渡到高武、穿越、修仙、科幻、网游一路看下来各种小说(盗版居多)。这两天回忆了一下初中时光,准备把金庸老先生的《天龙八部》再翻出来看看。
打开百度搜索一把,还真有盗版小说,50章网页版的,可惜不喜欢该网站的字体,不如咱们把它抓取下来保存成本地的txt文件吧。
python爬虫
开发环境:win 10
不高兴用scrapy这类框架了(因为忘记要怎样用框架了,还要翻文档才能想起来),直接手写几段python代码吧,html的解析就交给beautiful soup了,需要先用pip安装一下。
上图中的代码很简单,主要流程是:
1)遍历页码。
2)构造url。
3)使用urllib.request发送请求并获取响应。
4) 使用beautiful soup解析html代码得到每一章的标题和正文内容。
5) 把标题和正文内容附加到本地的txt文件尾部。
cmd里面运行一下,很快的,十几秒的时间就完成了50章小说的抓取,真是让人感叹:科学技术就是第一生产力。 最终得到了2.4MB的《天龙八部.txt》。
数据分析
看完《天龙八部》之后,有一个问题在小编脑海中萦绕不去绕梁三日而不绝,那就是“天龙八部小说里面,有三个男主,萧峰、段誉、虚竹,谁的出场次数最多,谁才是金老先生最看重的男主角?”
这个问题自从小编在初中时第一次读完《天龙八部》的时候就有了,当时和同学们讨论争辩了很久,最终也是无解;现在已经学会了python的一点皮毛,可以自己尝试着写代码分析一把。
话说python代码就是简单的不要不要的,因为复杂的操作都有各种库可以调用:
代码主要流程有4步:
1)从刚抓取到的txt文件里面读出全部内容。
2)使用jieba这个库来做切词的操作。所谓“切词”就是把一段话或者一句话切割成一个一个独立的词。
由于“萧峰”在小说前期名为“乔峰”,所以要写个if语句把这两个名字给统一一下。
3)调用wordCloud库生成词云。
4)调用pyplot库把词云作为图片展示出来。
词云的效果如下:
从上面的词云里面可以看到,乔峰和段誉的出场次数不相上下,虚竹、慕容、正淳、坦之就要差一个档次了。
这里,小编要提出一个问题,朋友们可以在评论里面进行解答:为什么词云图里面没有 "的","是","我", "你" 这几个字呢?从直觉上来看,这几个字的出现频率应该是比较高的。
wordCloud库生成词云的时候,还有一个神奇的功能,可以自定义图片样式,比如下面这样,是不是很有意思呢:
词云图的优点是可以一眼就看到出现次数较多的词,直击重点一针见血,缺点就是看不到具体的数字了。还是用matplotlib画个柱状图看看吧,x轴是角色名称,y轴是出现次数:
可能有朋友区分不清楚柱状图和直方图的区别,小编这里教朋友们一招:柱状图的每个竖条之间是有间隔的,直方图则没有。
从柱状图中也可以看出,乔峰的出场次数比段誉多了那么一点点;此外,王语嫣是当之无愧的第一女主角。
分析完男女主角之后,再分析一下4个字的词,看看金老先生喜欢使用哪些4字词(或者成语):
出现次数最多的是“哈哈大笑”,“大吃一惊”,“英雄好汉”。 小编猜测了一下,可能江湖中的英雄好汉们一般为莽夫,智商普遍偏低,正常情况下就哈哈大笑,出现意外就大吃一惊。
后记
文章写到这里,也就差不多结束了,朋友们有空也可以自己写几行python代码分析一下小说或者其它文本数据。
其实小编还想训练一下模型分析一下人物关系的,但是有几个包一直安装不成功,也就先放弃了,等以后有空再做吧。
为了完成伟大的工作,有两样东西是必须的,一个计划以及已经不多的时间。 伦纳德·伯恩斯坦
领取专属 10元无门槛券
私享最新 技术干货