Python資料視覺化:網易雲音樂歌單

極簡XksA發表於2019-01-16

本文轉載自公眾號 | 法納斯特

作者 | 小F

網易雲音樂2018年度聽歌報告—遇見你,真好

相信有不少人在上週,應該已經看過自己網易雲音樂的年度報告了。

小F也是去湊湊熱鬧,了一波自己的年度聽歌報告。

那麼你在雲村又聽了多少首歌,聽到最多的歌詞又是什麼呢?

2018年你的年度歌手又是誰,哪些又是你最愛的歌呢?

Python資料視覺化:網易雲音樂歌單

這是老表的,最愛花花

不過相比去年,我的票圈並沒有很多發自己年度報告的朋友。

不得不說,版權之爭開始,網易雲音樂似乎就在走下坡路。

很多喜歡的歌聽不了,這應該是大家共同的痛點。

最大的印象就是周董的歌,在愚人節時下架了,原以為只是個玩笑,不想卻是真的。

本次透過對網易雲音樂華語歌單資料的獲取,對華語歌單資料進行視覺化分析。

視覺化庫不採用pyecharts,來點新東西。

使用matplotlib視覺化庫,利用這個底層庫來進行視覺化展示。

/ 01 / 網頁分析


01 歌單索引頁

Python資料視覺化:網易雲音樂歌單

選取華語熱門歌單頁面。

獲取歌單播放量,名稱,及作者,還有歌單詳情頁連結。

本次一共獲取了1302張華語歌單。

02 歌單詳情頁

Python資料視覺化:網易雲音樂歌單

獲取歌單詳情頁資訊,資訊比較多。

有歌單名,收藏量,評論數,標籤,介紹,歌曲總數,播放量,收錄的歌名。

這裡歌曲的時長、歌手、專輯資訊在網頁的iframe中。

需要用selenium去獲取資訊,鑑於耗時過長,小F選擇放棄...

有興趣的小夥伴,可以試一下哈...

/ 02 / 資料獲取


01 歌單索引頁


from bs4 import BeautifulSoup
import requests
import time

headers = {
    'User-Agent''Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}

for i in range(0133035):
    print(i)
    time.sleep(2)
    url = '歐美&order=hot&limit=35&offset=' + str(i)
    response = requests.get(url=url, headers=headers)
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    # 獲取包含歌單詳情頁網址的標籤
    ids = soup.select('.dec a')
    # 獲取包含歌單索引頁資訊的標籤
    lis = soup.select('#m-pl-container li')
    print(len(lis))
    for j in range(len(lis)):
        # 獲取歌單詳情頁地址
        url = ids[j]['href']
        # 獲取歌單標題
        title = ids[j]['title']
        # 獲取歌單播放量
        play = lis[j].select('.nb')[0].get_text()
        # 獲取歌單貢獻者名字
        user = lis[j].select('p')[1].select('a')[0].get_text()
        # 輸出歌單索引頁資訊
        print(url, title, play, user)
        # 將資訊寫入CSV檔案中
        with open('playlist.csv''a+', encoding='utf-8-sig'as f:
            f.write(url + ',' + title + ',' + play + ',' + user + '\n')


獲取歌單索引頁資訊如下,共1302張華語歌單。

Python資料視覺化:網易雲音樂歌單

02 歌單詳情頁


from bs4 import BeautifulSoup
import pandas as pd
import requests
import time

df = pd.read_csv('playlist.csv', header=None, error_bad_lines=False, names=['url''title''play''user'])

headers = {
    'User-Agent''Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}

for i in df['url']:
    time.sleep(2)
    url = ' + i
    response = requests.get(url=url, headers=headers)
    html = response.text
    soup = BeautifulSoup(html, 'html.parser')
    # 獲取歌單標題
    title = soup.select('h2')[0].get_text().replace(','',')
    # 獲取標籤
    tags = []
    tags_message = soup.select('.u-tag i')
    for p in tags_message:
        tags.append(p.get_text())
    # 對標籤進行格式化
    if len(tags) > 1:
        tag = '-'.join(tags)
    else:
        tag = tags[0]
    # 獲取歌單介紹
    if soup.select('#album-desc-more'):
        text = soup.select('#album-desc-more')[0].get_text().replace('\n''').replace(','',')
    else:
        text = '無'
    # 獲取歌單收藏量
    collection = soup.select('#content-operation i')[1].get_text().replace('(''').replace(')''')
    # 歌單播放量
    play = soup.select('.s-fc6')[0].get_text()
    # 歌單內歌曲數
    songs = soup.select('#playlist-track-count')[0].get_text()
    # 歌單評論數
    comments = soup.select('#cnt_comment_count')[0].get_text()
    # 輸出歌單詳情頁資訊
    print(title, tag, text, collection, play, songs, comments)
    # 將詳情頁資訊寫入CSV檔案中
    with open('music_message.csv''a+', encoding='utf-8-sig'as f:
        f.write(title + ',' + tag + ',' + text + ',' + collection + ',' + play + ',' + songs + ',' + comments + '\n')
    # 獲取歌單內歌曲名稱
    li = soup.select('.f-hide li a')
    for j in li:
        with open('music_name.csv''a+', encoding='utf-8-sig'as f:
            f.write(j.get_text() + '\n')


獲取的1302張華語歌單的詳情。

Python資料視覺化:網易雲音樂歌單

1302張歌單裡的121118首歌。

Python資料視覺化:網易雲音樂歌單

/ 03 / 資料視覺化

01 歌曲出現次數 TOP10

Python資料視覺化:網易雲音樂歌單

榜上的十首歌,除了「水星記」,小F聽得次數都不少。

那麼你又是如何的呢?

在小F的印象裡,這些歌都曾在網易雲音樂熱歌榜的榜首出現過。

02 歌單貢獻UP主 TOP10

Python資料視覺化:網易雲音樂歌單

10大歌單貢獻UP主,感謝這些辛勤的“搬運工”,給大家帶來優質的歌單。

給廣大懶人癌患者,亦或選擇困難症患者,帶來福利。

03 歌單播放量 TOP10

Python資料視覺化:網易雲音樂歌單

歌單播放量前十名單,第一名7000多萬播放量。

其實matplotlib生成的圖是挺清楚的,只不過一上傳就變模糊了。

所以這裡你可能會覺得圖片質量不行...

其實並不是,為此小F做了相應的圖表,具體見文末~

04 歌單收藏量 TOP10

Python資料視覺化:網易雲音樂歌單

同樣是好東西,收藏收藏!!!

有一些歌單和播放量TOP10裡歌單有重複。

05 歌單評論數 TOP10

Python資料視覺化:網易雲音樂歌單

歌單「再見大俠:武俠小說泰斗金庸逝世」評論數最多。

相信不少人的閱讀時光,就是與金庸前輩的武俠小說一起度過。

飛雪連天射白鹿,笑書神俠倚碧鴛。

還有由小說改編成的電視劇,都是經典!!!

小F武俠小說看的少,武俠電視劇看的多...

06 歌單收藏數量分佈情況

Python資料視覺化:網易雲音樂歌單

將收藏數做對數處理,使得能直觀看出歌單收藏數的分佈。

主要分佈在0-15萬之間(ln(150000)=12)。

07 歌單播放數量分佈情況

Python資料視覺化:網易雲音樂歌單

歌單播放數主要分佈在0-1000萬。

其中ln(10000000)=16。

08 歌單標籤圖

Python資料視覺化:網易雲音樂歌單

既然選取的是華語歌單,那麼華語這二字必不可少,而且還佔大頭。

那麼就看看除了華語,還有什麼其他標籤。

「流行」沒啥好說的。

「古風」「說唱」「民謠」近些年來熱度是越來越高,不過也有玩壞的時候。

比如「離人愁」、「一人我飲酒醉」,小F作為吃瓜群眾,只能說且行且珍惜...

09 歌單介紹詞雲圖

Python資料視覺化:網易雲音樂歌單

歌單介紹詞雲圖,希望你能找到你喜歡某首歌的原因!!!

到底是希望,還是青春,亦或是回憶呢?

/ 04 / 總結

最後,把本次搜刮的乾貨,分享給大家。

Python資料視覺化:網易雲音樂歌單

Python資料視覺化:網易雲音樂歌單

Python資料視覺化:網易雲音樂歌單

|日打卡主題

第n天打卡,2018年你最喜歡哪一首歌,那一句歌詞,歡迎分享,一起喜歡。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556503/viewspace-2563554/,如需轉載,請註明出處,否則將追究法律責任。

相關文章