學習Python系列之詞云展示

2021-10-03 04:51:38 字數 3661 閱讀 3624

今天我們做乙個資料視覺化的專案,爬取毛不易的歌詞做詞云展示。

1.爬取資料

我們主要使用 python 爬蟲獲取 html,用 xpath 對歌曲的 id、名稱進行解析,然後通過網易雲**的 api 介面獲取每首歌的歌詞,最後將所有的歌詞合併得到乙個變數。`

需要獲取符合這個 xpath 的內容。我們通過分析 html **,能看到乙個關鍵的部分:id=『hotsong-list』。這個代表熱門歌曲列表,也正是我們想要解析的內容。我們想要獲取這個熱門歌曲列表下面所有的鏈結,xpath 解析就可以寫成 //*[@id=『hotsong-list』]//a。然後你能看到歌曲鏈結是 href 屬性,歌曲名稱是這個鏈結的文字。

headers =

# 得到指定歌手頁面 熱門前50的歌曲id,歌曲名

defget_songs

(artist_id)

: page_url =

''+ artist_id

# 獲取網頁html

res = requests.request(

'get'

, page_url, headers=headers)

# 用xpath解析 前50首熱門歌曲

html = etree.html(res.text)

href_xpath =

"//*[@id='hotsong-list']//a/@href"

name_xpath =

"//*[@id='hotsong-list']//a/text()"

hrefs = html.xpath(href_xpath)

names = html.xpath(name_xpath)

# 設定熱門歌曲的id,歌曲名稱

song_ids =

song_names =

for href, name in

zip(hrefs, names):9

:])print

(href,

' '

, name)

return song_ids, song_names

# 設定歌手id,毛不易為12138269

artist_id =

'12138269'

[song_ids, song_names]

= get_songs(artist_id)

獲得歌曲 id 之後,我們還需要知道這個歌曲的歌詞,對應**中的 get_song_lyric 函式,在這個函式裡呼叫了網易雲的歌詞 api 介面`

# 得到某一首歌的歌詞

defget_song_lyric

(headers,lyric_url)

: res = requests.request(

'get'

, lyric_url, headers=headers)

if'lrc'

in res.json():

lyric = res.json()[

'lrc'][

'lyric'

] new_lyric = re.sub(r'[\d:.[\]]',''

,lyric)

return new_lyric

else

:return

''print

(res.json(

))

2.設定停用詞有一些常用詞,比如』作詞』, 『作曲』, '編曲』等,我們可以把這些詞設定為停用詞,編寫 remove_stop_words 函式,從文字中去掉:

# 去掉停用詞

defremove_stop_words

(f):

stop_words =

['作詞'

,'作曲'

,'編曲'

,'arranger'

,'錄音'

,'混音'

,'人聲'

,'vocal'

,'弦樂'

,'keyboard'

,'鍵盤'

,'編輯'

,'助理'

,'assistants'

,'mixing'

,'editing'

,'recording'

,'**'

,'製作'

,'producer'

,'發行'

,'produced'

,'and'

,'distributed'

]for stop_word in stop_words:

f = f.replace(stop_word,'')

return f

3.最後編寫 create_word_cloud 函式,通過歌詞文字生成詞云檔案。建立好 wordcloud 類之後,就可以使用 wordcloud=generate(text) 方法生成詞云,傳入的引數 text 代表你要分析的文字,最後使用 wordcloud.tofile(「a.jpg」) 函式,將得到的詞云影象直接儲存為格式檔案。或者使用 python 的視覺化工具 matplotlib 進行顯示。

# 生成詞云

defcreate_word_cloud

(f):

print

('根據詞頻,開始生成詞云!'

) f = remove_stop_words(f)

cut_text =

" ".join(jieba.cut(f,cut_all=

false

, hmm=

true))

wc = wordcloud(

font_path=

"./wc.ttf"

, max_words=

100,

width=

2000

, height=

1200,)

print

(cut_text)

wordcloud = wc.generate(cut_text)

# 寫詞云

)# 顯示詞云檔案

plt.imshow(wordcloud)

plt.axis(

"off"

) plt.show(

)

4.結果展示

5.總結

前期的資料準備在整個過程中佔了很大一部分。使用 python 作為資料採集工具,利用python 爬蟲和 xpath 解析。詞云工具 wordcloud,它是乙個很好用的 python 工具,可以將複雜的文字通過詞雲圖的方式呈現。需要注意的是,當我們需要使用中文字型的時候,比如黑體 simhei,就可以將 wordcloud 中的 font_path 屬性設定為 simhei.ttf,你也可以設定其他藝術字型,在給毛不易的歌詞做詞云展示的時候,我們就用到了藝術字型。

完整**放在了github上,位址為

python之詞云學習及詞云的實現

width 指定的寬度,預設400畫素 height 指定的高度,預設200畫素 min font size 指定詞雲中字型的最小字型大小 max font size 指定詞雲中字型的最大字型大小 font step 指定詞雲中字型字型大小的步進間隔 font path 指定字型檔案的路徑,例 微軟...

Python學習 string功能展示

字串拼接 a abc b 123 print a b abc123 c join a,b print c abc123 總結 join 相較於 可以避免記憶體空間的浪費,並且更加快速 字串內建功能 str hello word t str.count l 統計元素個數 w str.capitaliz...

python學習系列 1

今天是學習python的第一天 覺得有必要做點記錄,加上程式設計學習做紙質筆記個人覺得不太合適,於是將這裡當成記錄學習程式設計的本吧。1.程式編寫的基本方法 ipo input process output 2.解決程式設計問題的步驟 分析問題 分析問題的計算部分,理清思路 劃分邊界 劃分問題的功能...