Python爬取酷狗top500歌曲榜单并可视化(至少四个可视化图片),请给出相关代码
时间: 2024-06-10 08:07:50 浏览: 94
可以的,以下是Python爬取酷狗top500歌曲榜单并可视化(至少四个可视化图片)的相关代码:
```python
import requests
from bs4 import BeautifulSoup
import pandas as pd
import matplotlib.pyplot as plt
url = 'https://www.kugou.com/yy/rank/home/1-8888.html?from=rank'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3'}
response = requests.get(url, headers=headers)
response.encoding = 'utf-8'
soup = BeautifulSoup(response.text, 'html.parser')
ranks = soup.select('.pc_temp_num')
titles = soup.select('.pc_temp_songname')
times = soup.select('.pc_temp_time')
list_name = []
list_singer = []
list_times = []
for i in range(len(titles)):
name = titles[i].get('title').split('-')[1]
singer = titles[i].get('title').split('-')[0]
list_name.append(name)
list_singer.append(singer)
list_times.append(times[i].text)
df = pd.DataFrame({'名称': list_name, '歌手': list_singer, '时间': list_times})
# 可视化1: top10歌曲名称
df_top10 = df[:10]
plt.bar(df_top10['名称'], df_top10['时间'])
plt.title("Top10歌曲名称")
plt.xlabel("歌曲名称")
plt.ylabel("时间")
plt.show()
# 可视化2: top10歌手
df_singer_count = pd.DataFrame({'count': df.groupby(by='歌手').size()}).reset_index()
df_singer_count_top10 = df_singer_count.sort_values(by=['count'], ascending=False).head(10)
plt.bar(df_singer_count_top10['歌手'], df_singer_count_top10['count'])
plt.title("Top10歌手")
plt.xlabel("歌手")
plt.ylabel("歌曲数量")
plt.show()
# 可视化3:每月出现最多的歌曲名称
df['时间'] = df['时间'].apply(lambda x: x.split("-")[1])
df_time_count = pd.DataFrame({'count': df.groupby(by='时间').size()}).reset_index()
df_time_max_song = df.loc[df.groupby(by='时间')['名称'].idxmax()].reset_index(drop=True)
plt.bar(df_time_max_song['时间'], df_time_max_song['名称'])
plt.title("每月出现最多的歌曲名称")
plt.xlabel("时间")
plt.ylabel("歌曲名称")
plt.show()
# 可视化4:每月出现最多的歌手
df_time_singer = pd.DataFrame(df.groupby(['时间', '歌手']).size())
df_time_singer = df_time_singer.reset_index().rename(columns={0: 'count'})
df_time_singer_max = df_time_singer.loc[df_time_singer.groupby(['时间'])['count'].idxmax()].reset_index(drop=True)
plt.bar(df_time_singer_max['时间'], df_time_singer_max['歌手'])
plt.title("每月出现最多的歌手")
plt.xlabel("时间")
plt.ylabel("歌手")
plt.show()
```
希望能够帮到你!
阅读全文