/ 01 / 網(wǎng)頁分析
01 歌單索引頁
選取華語熱門歌單頁面据忘。
獲取歌單播放量,名稱羹幸,及作者,還有歌單詳情頁鏈接辫愉。
本次一共獲取了1302張華語歌單栅受。
02 歌單詳情頁
獲取歌單詳情頁信息,信息比較多。
有歌單名屏镊,收藏量依疼,評論數(shù),標(biāo)簽而芥,介紹涛贯,歌曲總數(shù),播放量蔚出,收錄的歌名弟翘。
這里歌曲的時長、歌手骄酗、專輯信息在網(wǎng)頁的iframe中稀余。
需要用selenium去獲取信息,鑒于耗時過長趋翻,筆者選擇放棄...
有興趣的小伙伴睛琳,可以試一下哈...
/ 02 / 數(shù)據(jù)獲取
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(0, 1330, 35):
print(i)
time.sleep(2)
url = 'https://music.163.com/discover/playlist/?cat=歐美&order=hot&limit=35&offset=' + str(i)
response = requests.get(url=url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 獲取包含歌單詳情頁網(wǎng)址的標(biāo)簽
ids = soup.select('.dec a')
# 獲取包含歌單索引頁信息的標(biāo)簽
lis = soup.select('#m-pl-container li')
print(len(lis))
for j in range(len(lis)):
# 獲取歌單詳情頁地址
url = ids[j]['href']
# 獲取歌單標(biāo)題
title = ids[j]['title']
# 獲取歌單播放量
play = lis[j].select('.nb')[0].get_text()
# 獲取歌單貢獻(xiàn)者名字
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 + '
')
獲取歌單索引頁信息如下,共1302張華語歌單踏烙。
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 = 'https://music.163.com' + i
response = requests.get(url=url, headers=headers)
html = response.text
soup = BeautifulSoup(html, 'html.parser')
# 獲取歌單標(biāo)題
title = soup.select('h2')[0].get_text().replace(',', '师骗,')
# 獲取標(biāo)簽
tags = []
tags_message = soup.select('.u-tag i')
for p in tags_message:
tags.append(p.get_text())
# 對標(biāo)簽進(jìn)行格式化
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('
', '').replace(',', ',')
else:
text = '無'
# 獲取歌單收藏量
collection = soup.select('#content-operation i')[1].get_text().replace('(', '').replace(')', '')
# 歌單播放量
play = soup.select('.s-fc6')[0].get_text()
# 歌單內(nèi)歌曲數(shù)
songs = soup.select('#playlist-track-count')[0].get_text()
# 歌單評論數(shù)
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èi)歌曲名稱
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() + '
')
獲取的1302張華語歌單的詳情讨惩。
1302張歌單里的121118首歌辟癌。
/ 03 / 數(shù)據(jù)可視化
可視化代碼已上傳GitHub,點(diǎn)擊左下角閱讀原文即可訪問<瞿怼J蛏佟!
****01 歌曲出現(xiàn)次數(shù) TOP10****
榜上的十首歌处面,除了「水星記」厂置,筆者聽得次數(shù)都不少。
那么你又是如何的呢魂角?
在筆者的印象里昵济,這些歌都曾在網(wǎng)易云音樂熱歌榜的榜首出現(xiàn)過。
******02 歌單貢獻(xiàn)UP主 TOP10******
10大歌單貢獻(xiàn)UP主野揪,感謝這些辛勤的“搬運(yùn)工”访忿,給大家?guī)韮?yōu)質(zhì)的歌單。
給廣大懶人癌患者囱挑,亦或選擇困難癥患者醉顽,帶來福利。
03 歌單播放量 TOP10
歌單播放量前十名單平挑,第一名7000多萬播放量游添。
其實matplotlib生成的圖是挺清楚的系草,只不過一上傳就變模糊了。
所以這里你可能會覺得圖片質(zhì)量不行...
其實并不是唆涝,為此筆者做了相應(yīng)的圖表找都,具體見文末~
04 歌單收藏量 TOP10
同樣是好東西,收藏收藏@群āD艹堋!
有一些歌單和播放量TOP10里歌單有重復(fù)亡驰。
05 歌單評論數(shù) TOP10
歌單「再見大俠:武俠小說泰斗金庸逝世」評論數(shù)最多晓猛。
相信不少人的閱讀時光,就是與金庸前輩的武俠小說一起度過凡辱。
飛雪連天射白鹿戒职,笑書神俠倚碧鴛。
還有由小說改編成的電視劇透乾,都是經(jīng)典:樵铩!乳乌!
筆者武俠小說看的少捧韵,武俠電視劇看的多...
****06 歌單收藏數(shù)量分布情況****
將收藏數(shù)做對數(shù)處理,使得能直觀看出歌單收藏數(shù)的分布汉操。
主要分布在0-15萬之間(ln(150000)=12)再来。
******07 歌單播放數(shù)量分布情況******
歌單播放數(shù)主要分布在0-1000萬。
其中l(wèi)n(10000000)=16客情。
08 歌單標(biāo)簽圖
既然選取的是華語歌單其弊,那么華語這二字必不可少,而且還占大頭膀斋。
那么就看看除了華語,還有什么其他標(biāo)簽痹雅。
「流行」沒啥好說的仰担。
「古風(fēng)」「說唱」「民謠」近些年來熱度是越來越高,不過也有玩壞的時候绩社。
比如「離人愁」摔蓝、「一人我飲酒醉」,筆者作為吃瓜群眾愉耙,只能說且行且珍惜...
09 歌單介紹詞云圖
歌單介紹詞云圖贮尉,希望你能找到你喜歡某首歌的原因!F友亍猜谚!
到底是希望败砂,還是青春,亦或是回憶呢魏铅?
/ 04 / 總結(jié)
最后昌犹,把本次搜刮的干貨,分享給大家览芳。
可視化及相關(guān)代碼都放「GitHub」上頭了斜姥。