中秋爬取詩(shī)文數(shù)據(jù)制作詞云

正好中秋節(jié)见间,為了應(yīng)景米诉,便利用Python來(lái)網(wǎng)上爬些中秋詩(shī)句來(lái)制作詞云,詞云可基于文本內(nèi)容的詞頻進(jìn)行可視化研究,是比較常見(jiàn)的文本分析可視化方法魏身。

按照慣例弛针,先上效果圖削茁。


中秋詞云.png

一、制作步驟

  • 1.數(shù)據(jù)爬取及清洗
  • 2.數(shù)據(jù)加載制作詞云慰丛,主要包括分詞-統(tǒng)計(jì)詞頻-去停用詞-制作詞云

二瘾杭、數(shù)據(jù)爬取及清洗

2.1 詩(shī)句標(biāo)題列表爬取

爬蟲(chóng)目標(biāo)是古詩(shī)文網(wǎng),選擇中秋主題贤笆,跳轉(zhuǎn)到https://so.gushiwen.org/gushi/zhongqiu.aspx鏈接讨阻,要先把這個(gè)列表頁(yè)面的所有詩(shī)句爬取下來(lái)钝吮。

古詩(shī)列表.png

看看響應(yīng)結(jié)果內(nèi)容,有兩個(gè)數(shù)據(jù)是我們需要的棘催,分別是href中的屬性內(nèi)容耳标,需要用它來(lái)請(qǐng)求后續(xù)的具體詩(shī)句,還有就是詩(shī)句標(biāo)題纲仍。

古詩(shī)返回結(jié)果.png

定位在divtypecont的標(biāo)簽,爬取的結(jié)果如下:

/shiwenv_632c5beb84eb.aspx
水調(diào)歌頭·明月幾時(shí)有(蘇軾)
/shiwenv_e38b61012996.aspx
中秋月(晏殊)
/shiwenv_4d2028af6aed.aspx
西江月·世事一場(chǎng)大夢(mèng)(蘇軾)
/shiwenv_2e73c8b1e52f.aspx
天竺寺八月十五日夜桂(皮日休)
/shiwenv_76c8331c8937.aspx
...

2.2 詩(shī)句內(nèi)容爬取

在拿到所有的詩(shī)句標(biāo)題列表之后明棍,根據(jù)其請(qǐng)求規(guī)律https://so.gushiwen.org/shiwenv_632c5beb84eb.aspx寇僧,也就是https://so.gushiwen.org/+href進(jìn)行拼接來(lái)請(qǐng)求具體詩(shī)句內(nèi)容沸版,我們要做的對(duì)詩(shī)文列表進(jìn)行遍歷爬下所有數(shù)據(jù)即可视粮。

詩(shī)句內(nèi)容.png

定位divsons標(biāo)簽下的divcontson 標(biāo)簽橙凳,就可取出,拿到后把詩(shī)文合并為一行即可钓觉。
具體爬取內(nèi)容打印如下:

水調(diào)歌頭·明月幾時(shí)有(蘇軾)::丙辰中秋坚踩,歡飲達(dá)旦,大醉批幌,作此篇嗓节,兼懷子由赦政。明月幾時(shí)有?把酒問(wèn)青天恢着。不知天上宮闕掰派,今夕是何年。我欲乘風(fēng)歸去靡羡,又恐瓊樓玉宇略步,高處不勝寒。起舞弄清影绽诚,何似在人間?(何似 一作:何時(shí)恩够;又恐 一作:惟 / 唯恐)轉(zhuǎn)朱閣蜂桶,低綺戶,照無(wú)眠扑媚。不應(yīng)有恨钦购,何事長(zhǎng)向別時(shí)圓?人有悲歡離合葵萎,月有陰晴圓缺唱凯,此事古難全。但愿人長(zhǎng)久卷雕,千里共嬋娟票从。(長(zhǎng)向 一作:偏向)
中秋月(晏殊)::十輪霜影轉(zhuǎn)庭梧,此夕羈人獨(dú)向隅浸间。未必素娥無(wú)悵恨吟榴,玉蟾清冷桂花孤吩翻。
...

2.3 具體代碼示例

Python爬蟲(chóng)需要兩個(gè)工具,

  • Requests 庫(kù)细移,一款比較好用的HTTP庫(kù)熊锭,用于網(wǎng)絡(luò)請(qǐng)求缔刹。
  • BeautifulSoup 庫(kù) 劣针,一款優(yōu)秀的HTML/XML解析庫(kù)捺典。

這些庫(kù)安裝方式為pip install bs4从祝、pip install requests

from bs4 import BeautifulSoup
import requests

def Get_url():
   
    url = 'https://so.gushiwen.org/gushi/zhongqiu.aspx'
    head = {}
    head['User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'
    req = requests.get(url, headers=head)
    soup = BeautifulSoup(req.content)
#         print(req.text)

    file=r'mid-autumn.txt'
    # 獲取textarea標(biāo)簽中的內(nèi)容
    for i in soup.find_all('div',class_='typecont'):
        a = i.find_all('a')
        span = i.find_all('span')
        
        for index in range(0, len(a)):
            print(a[index].attrs['href'])
            print(span[index].text)
            
            url2 = 'https://so.gushiwen.org/'
            url3 = url2 + a[index].attrs['href']
            req2 = requests.get(url3, headers=head)
            soup2 = BeautifulSoup(req2.content)
        
            song = soup2.find_all('div',class_='sons')
            content = song[0].find_all('div',class_='contson')
            print(content[0].text)

            file=r'yongshi3.txt'
            with open(file,'a+') as f:
                # 以[題目::詩(shī)]的格式寫(xiě)入文件
                f.write(span[index].text.strip()+"::"+content[0].text.replace("\n", "")+'\n')
                f.close()
        
 
if __name__ == '__main__':
    Get_url()

三牍陌、詞云制作

要先進(jìn)行分詞才能對(duì)每個(gè)詞進(jìn)行頻數(shù)統(tǒng)計(jì)毒涧, Python下安裝分詞器命令為pip install jieba,安裝后直接import jieba即可仿吞。

import jieba

content = '丙辰中秋捡偏,歡飲達(dá)旦,大醉你虹,作此篇彤避,兼懷子由。明月幾時(shí)有挟伙?把酒問(wèn)青天模孩。不知天上宮闕榨咐,今夕是何年。我欲乘風(fēng)歸去块茁,又恐瓊樓玉宇,高處不勝寒永淌。起舞弄清影,何似在人間谭跨?(何似 一作:何時(shí)李滴;又恐 一作:惟 / 唯恐)轉(zhuǎn)朱閣所坯,低綺戶,照無(wú)眠堂湖。不應(yīng)有恨周瞎,何事長(zhǎng)向別時(shí)圓?人有悲歡離合酱讶,月有陰晴圓缺彼乌,此事古難全。但愿人長(zhǎng)久灶挟,千里共嬋娟毒租。(長(zhǎng)向 一作:偏向)'
segs = jieba.lcut(content)
print("/".join(segs))

可以看看分詞結(jié)果:

丙辰/中秋/稚铣,/歡飲/達(dá)旦/,/大醉/墅垮,/作此/篇/惕医,/兼懷子/由/。/明月/幾時(shí)/有/算色?/把酒/問(wèn)青天/抬伺。/不知/天上/宮闕/,/今夕/是/何年/灾梦。/我/欲/乘風(fēng)/歸去/峡钓,/又/恐/瓊樓玉宇/妓笙,/高處不勝/寒/能岩。/起舞/弄清/影/寞宫,/何似/在/人間/?/(/何似/ /一作/:/何時(shí)/捧灰;/又/恐/ /一作/:/惟/ /// /唯恐/)/轉(zhuǎn)朱閣/淆九,/低綺戶/,/照無(wú)眠/毛俏。/不/應(yīng)有/恨/,/何事/長(zhǎng)向/別時(shí)圓/饲窿?/人有/悲歡離合/煌寇,/月/有/陰晴圓/缺/,/此事/古難全/逾雄。/但愿人長(zhǎng)久/阀溶,/千里/共/嬋娟/。/(/長(zhǎng)向/ /一作/:/偏向/)

然后我們還需要的是制作詞云用的庫(kù)鸦泳,也要先安裝pip install wordcloud银锻,對(duì)數(shù)據(jù)進(jìn)行分詞和去停用詞后的操作其實(shí)就是對(duì)這個(gè)工具的使用了,完整的示例如下:

import jieba
import pandas as pd
import numpy as np
from imageio import imread
from wordcloud import WordCloud,ImageColorGenerator
import matplotlib.pyplot as plt
from gensim import corpora, models, similarities
import gensim

#定義停用詞
stopwords=pd.read_csv("./stopwords.txt",index_col=False,quoting=3,sep="\t",names=['stopword'], encoding='utf-8')
#stopwords=stopwords['stopword'].values
#加載語(yǔ)料
df = pd.read_csv('./mid-autumn.csv', encoding='utf-8')
print(df.head(5))
#刪除nan行
df.dropna(inplace=True)
lines = df.content.values.tolist()
print(lines[0].split('::')[1])
#用jieba進(jìn)行分詞操作
segment=[]
#分詞
for line in lines:
    try:
        line = line.split('::')[1]
        segs = jieba.lcut(line)
        segs = [v for v in segs if not str(v).isdigit()] #過(guò)濾數(shù)字
        segs = list(filter(lambda x:x.strip(), segs)) #過(guò)濾空格
        #segs = list(filter(lambda x:x not in stopwords, segs)) #去掉停用詞
        for seg in segs:
            if len(seg)>1 and seg!='\r\n':
                segment.append(seg)
    except Exception:
        print(line)
        continue
#分詞后加入一個(gè)新的DataFrame
words_df=pd.DataFrame({'segment':segment})
#安裝關(guān)鍵字groupby分組統(tǒng)計(jì)詞頻做鹰,并按照計(jì)數(shù)降序排序
words_stat=words_df.groupby(by=['segment'])['segment'].agg({"計(jì)數(shù)":np.size})
words_stat=words_stat.reset_index().sort_values(by=["計(jì)數(shù)"],ascending=False)
#分組之后去掉停用詞
words_stat=words_stat[~words_stat.segment.isin(stopwords.stopword)]
#print(words_stat)

#下面是重點(diǎn)击纬,繪制wordcloud詞云,這一提供2種方式
#第一種是默認(rèn)的樣式
#定義wordcloud中字體文件的路徑
simhei = "./car.ttf"
wordcloud=WordCloud(font_path=simhei,background_color="white",max_font_size=80)
word_frequence = {x[0]:x[1] for x in words_stat.head(1000).values}
wordcloud=wordcloud.fit_words(word_frequence)
plt.imshow(wordcloud)
wordcloud.to_file(r'wordcloud_1.jpg')  #保存結(jié)果

#第二種是自定義圖片
text = " ".join(words_stat['segment'].head(100).astype(str))
abel_mask = imread(r"./china.jpg")  #這里設(shè)置了一張中國(guó)地圖
wordcloud2 = WordCloud(background_color='white',  # 設(shè)置背景顏色 
                     mask = abel_mask,  # 設(shè)置背景圖片
                     max_words = 3000,  # 設(shè)置最大現(xiàn)實(shí)的字?jǐn)?shù)
                     font_path = simhei,  # 設(shè)置字體格式
                     width=2048,
                     height=1024,
                     scale=4.0,
                     max_font_size= 100,  # 字體最大值
                     random_state=42).generate(text)

# 根據(jù)圖片生成詞云顏色
image_colors = ImageColorGenerator(abel_mask)
wordcloud2.recolor(color_func=image_colors)
# 以下代碼顯示圖片
plt.imshow(wordcloud2)
plt.axis("off")
plt.show()
wordcloud2.to_file(r'wordcloud_2.jpg') #保存結(jié)果

第二種自定義的效果如下圖:


wordcloud_2.png

代碼已經(jīng)對(duì)應(yīng)爬取的數(shù)據(jù)都已上傳github钾麸,對(duì)應(yīng)鏈接為WordCloud更振。
因?yàn)榕廊〉墓旁?shī)文網(wǎng)的數(shù)據(jù),如有違規(guī)請(qǐng)通知?jiǎng)h掉饭尝。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末肯腕,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钥平,更是在濱河造成了極大的恐慌实撒,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涉瘾,死亡現(xiàn)場(chǎng)離奇詭異知态,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)睡汹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)肴甸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人囚巴,你說(shuō)我怎么就攤上這事原在∮讶牛” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵庶柿,是天一觀的道長(zhǎng)村怪。 經(jīng)常有香客問(wèn)我,道長(zhǎng)浮庐,這世上最難降的妖魔是什么甚负? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮审残,結(jié)果婚禮上梭域,老公的妹妹穿的比我還像新娘。我一直安慰自己搅轿,他們只是感情好病涨,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著璧坟,像睡著了一般既穆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雀鹃,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天幻工,我揣著相機(jī)與錄音,去河邊找鬼黎茎。 笑死囊颅,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的工三。 我是一名探鬼主播迁酸,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼俭正!你這毒婦竟也來(lái)了奸鬓?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤掸读,失蹤者是張志新(化名)和其女友劉穎串远,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體儿惫,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡澡罚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了肾请。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片留搔。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铛铁,靈堂內(nèi)的尸體忽然破棺而出隔显,到底是詐尸還是另有隱情却妨,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布括眠,位于F島的核電站彪标,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏掷豺。R本人自食惡果不足惜捞烟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望当船。 院中可真熱鬧题画,春花似錦、人聲如沸生年。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)抱婉。三九已至,卻和暖如春桌粉,著一層夾襖步出監(jiān)牢的瞬間蒸绩,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工铃肯, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留患亿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓押逼,卻偏偏與公主長(zhǎng)得像步藕,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子挑格,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Context 需要使用ASP.NET的SignalR庫(kù)咙冗,配合NATS和Redis實(shí)現(xiàn)大文件向前端的推送。文件發(fā)送...
    Taraks閱讀 336評(píng)論 0 0
  • 前言 在swift中,不同類型之間是不能進(jìn)行運(yùn)算的,需要強(qiáng)制類型轉(zhuǎn)換, 但是特別需要注意的一點(diǎn): 如果說(shuō)是字面量之...
    Alexander閱讀 220評(píng)論 0 1
  • 每年漂彤,公司都會(huì)到學(xué)校招大專生雾消,本科生,給予儲(chǔ)備干部的待遇挫望,地級(jí)市立润,3200起薪,試用期6個(gè)月媳板,定期安排系列課程桑腮,安...
    芳年花月閱讀 304評(píng)論 0 2
  • 羅冬娜 堅(jiān)持分享第717天 2019/8/5 今天孩子幫我提一下東西,爺爺路上一直在說(shuō):你小蛉幸,提不住破讨,別讓胳膊累壞...
    娜之絮語(yǔ)閱讀 190評(píng)論 0 1