實戰:python分析天龍八部

python碼神 發佈 2020-01-30T15:22:27+00:00

python爬蟲開發環境:win10不高興用scrapy這類框架了,直接手寫幾段python代碼吧,html的解析就交給beautiful soup了,需要先用pip安裝一下。

為了完成偉大的工作,有兩樣東西是必須的,一個計劃以及已經不多的時間。    倫納德·伯恩斯坦​

大家好,我是今天的值班小編,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代碼分析一下小說或者其它文本數據。

其實小編還想訓練一下模型分析一下人物關係的,但是有幾個包一直安裝不成功,也就先放棄了,等以後有空再做吧。

為了完成偉大的工作,有兩樣東西是必須的,一個計劃以及已經不多的時間。    倫納德·伯恩斯坦​

關鍵字: