用Python爬取酷狗音樂熱門榜單并可視化分析后,我們終于知道華語樂壇姓什么!
↑?關注 + 星標?,每天學Python新技能
后臺回復【大禮包】送你Python自學大禮包
本文是一位熱愛Python的小姐姐的投稿,她今年才大四,可謂是很厲害了,有想跟小姐姐一起學Python的,可以私聊志斌進學習群,跟小姐姐一起學習~
本文僅供學習參考,不做它用。僅代表個人意見,如有不妥之處,請私聊志斌改正~
爬取頁面展示
熱門榜單——酷狗top500: https://www.kugou.com/yy/rank/home/1-8888.html?from=rank

特色榜單——影視金曲榜: https://www.kugou.com/yy/rank/home/1-33163.html?from=rank

項目分析
對于酷狗top500:
打開network發(fā)現(xiàn)酷狗并沒有將榜單封裝在json里面,所以還是使用BeautifulSoup爬取 
觀察頁面發(fā)現(xiàn),并沒有下一頁的選項,只有下載客戶端 
再觀察url發(fā)現(xiàn) :https://www.kugou.com/yy/rank/home/1-8888.html?from=rank,出現(xiàn)了1-8888,故猜測下一個頁面是2-8888嗎,推測正確,按這個規(guī)律,應該有23個頁面
對于酷狗影視金曲榜(100首):
同理:
綜上:對于酷狗的整個榜單模塊只需要替換頁數(shù)跟榜單id值即可隨便爬取
項目結構

詞云輪廓圖
wc.jpg

kugoutop500.py
import time
import requests
from bs4 import BeautifulSoup
import pandas as pd
from matplotlib import pyplot as plt
from wordcloud import WordCloud
from PIL import Image
import numpy as np
def main():
dic = get_data()
items = process_data(dic)
print(len(items), items)
word_cloud(items)
def cnt_songer(songer, dic):
if songer not in dic:
dic[songer] = 1
else:
dic[songer] = dic[songer] + 1
def process_data(dic):
items = dict(sorted(dic.items(), key=lambda x: x[1], reverse=True))
items = {key: value for key, value in items.items() if value > 1}
print(items)
return items
def word_cloud(items):
img = Image.open(r'wc.jpg')
imgarr = np.array(img)
wc = WordCloud(
background_color='black',
mask=imgarr,
font_path='C:/Windows/Fonts/msyh.ttc',
scale=20,
prefer_horizontal=0.5,
# 表示在水平如果不合適,就旋轉為垂直方向
random_state=55
)
wc.generate_from_frequencies(items)
plt.figure(5)
plt.imshow(wc)
plt.axis('off')
plt.show()
wc.to_file("酷狗TOP500詞云1.png")
if __name__ == '__main__':
main()
運行截圖: 
56 {' 周杰倫': 37, ' 林俊杰': 18, ' 王靖雯': 6, ' 張杰': 6, ' 陳奕迅': 4, ' 任然': 4, ' 海來阿木': 4, ' 藍心羽': 4, ' 王杰': 4, ' 莫叫姐姐': 3, ' 毛不易': 3, ' 王菲': 3, ' 海倫': 3, ' 阿YueYue': 3, ' 郁可唯': 3, ' 半噸兄弟': 3, ' 許巍': 3, ' 張信哲': 3, ' 李榮浩': 3, ' F.I.R.飛兒樂團': 3, ' 不是花火呀': 3, ' 張碧晨': 2, ' 隊長': 2, ' 程jiajia': 2, ' BEYOND': 2, ' 蔡健雅': 2, ' 洛先生': 2, ' 陳慧嫻': 2, ' 程響': 2, ' 王小帥': 2, ' 徐佳瑩': 2, ' Charlie Puth': 2, ' 小藍背心': 2, ' IN': 2, ' Taylor Swift': 2, ' 七叔(葉澤浩)': 2, ' 周深': 2, ' 大歡': 2, ' 戴羽彤': 2, ' 小阿楓': 2, ' 蘇星婕': 2, ' 劉德華': 2, ' 周傳雄': 2, ' 蘇譚譚': 2, ' 孫燕姿': 2, ' 王忻辰、蘇星婕': 2, ' 李克勤': 2, ' 林子祥': 2, ' 莊心妍': 2, ' 聞人聽書_': 2, ' 朱添澤': 2, ' 陳子晴': 2, ' 胡66': 2, ' aespa (???)': 2, ' OneRepublic': 2, ' 鳳凰傳奇': 2}
酷狗top500詞云:(這才是真正的“華語樂壇”)

酷狗影視金曲.py
import time
import requests
from bs4 import BeautifulSoup
import pandas as pd
from matplotlib import pyplot as plt
from wordcloud import WordCloud
from PIL import Image
import numpy as np
def main():
dic = get_data()
items = process_data(dic)
print(len(items), items)
word_cloud(items)
def cnt_songer(songer, dic):
if songer not in dic:
dic[songer] = 1
else:
dic[songer] = dic[songer] + 1
def process_data(dic):
items = dict(sorted(dic.items(), key=lambda x: x[1], reverse=True))
items = {key: value for key, value in items.items() if value > 1}
print(items)
return items
def word_cloud(items):
img = Image.open(r'wc.jpg')
imgarr = np.array(img)
wc = WordCloud(
background_color='black',
mask=imgarr,
font_path='C:/Windows/Fonts/msyh.ttc',
scale=20,
prefer_horizontal=0.5,
# 表示在水平如果不合適,就旋轉為垂直方向
random_state=55
)
wc.generate_from_frequencies(items)
plt.figure(5)
plt.imshow(wc)
plt.axis('off')
plt.show()
wc.to_file("酷狗影視金曲詞云.png")
if __name__ == '__main__':
main()
運行截圖: 
15 {' BEYOND': 5, ' 陳奕迅': 4, ' 李克勤': 3, ' 林俊杰': 3, ' 王菲': 2, ' 莫文蔚': 2, ' 周杰倫': 2, ' 郁可唯': 2, ' 劉若英': 2, ' 王杰': 2, ' 毛不易': 2, ' 樸樹': 2, ' 薛之謙': 2, ' 楊丞琳': 2, ' 劉德華': 2}
影視金曲榜詞云:(梅開二度) 
推薦閱讀
評論
圖片
表情
