最近Apple Music可以查看自己的年度歌单了,兴趣使然下想写个脚本生成一个词云看下自己的听歌关键词,写完脚本后发现适配所有的Apple Music歌单(或者叫播放列表),下面是我自己的年度歌单词云:
随便找了个轻音少女的播放列表,词云如下:
最后,代码如下:
import requests
from bs4 import BeautifulSoup
from wordcloud import WordCloud
import matplotlib.pyplot as plt
urls = ["https://music.apple.com/cn/playlist/%E8%BD%BB%E9%9F%B3%E5%B0%91%E5%A5%B3-%E4%BB%A3%E8%A1%A8%E4%BD%9C%E5%93%81/pl.ccbeece8304b43b394005148782a0e4b"]
word_list = []
HEADERS = {
"accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9",
"accept-encoding": "gzip, deflate, br",
"accept-language": "zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6",
"cache-control": "max-age=0",
"upgrade-insecure-requests": "1",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 Edg/92.0.902.84",
}
font_path = "/System/Library/fonts/PingFang.ttc"
for url in urls:
res = requests.get(url, headers=HEADERS)
res.encoding = "utf-8"
soup = BeautifulSoup(res.text, 'lxml')
song_name_div = soup.select("div.songs-list-row__song-name.svelte-1yo4jst")
song_singer_div = soup.select("div.songs-list__col.songs-list__col--secondary.svelte-1yo4jst > div > span > a")
song_album_div = soup.select("div.songs-list__col.songs-list__col--tertiary.svelte-1yo4jst > div > span > a")
for item in song_name_div:
word_list.append(item.get_text())
for item in song_singer_div:
word_list.append(item.get_text())
for item in song_album_div:
word_list.append(item.get_text())
counts = {}
word_cloud = []
for word in word_list:
counts[word] = counts.get(word, 0) + 1
items = list(counts.items())
items.sort(key=lambda x: x[1], reverse=True)
text_cut = '/'.join(word_list)
wordcloud = WordCloud(background_color='white',
font_path=font_path,
width=1000,
height=860,
margin=2,
collocations=False,).generate(text_cut)
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()
© 版权声明
THE END
- 最新
- 最热
只看作者