爬取网易云热门歌曲前100名并做出柱状图可视化分析,代码给注释,给出程序设计思路,代码完整可用
时间: 2023-06-27 15:03:31 浏览: 93
程序设计思路:
1. 使用 requests 库向网易云热门歌曲页面发送请求,获取页面 HTML。
2. 使用 BeautifulSoup 库解析 HTML,提取出前100首歌曲的名称和歌手。
3. 使用 matplotlib 库生成柱状图,将前100首歌曲的播放量作为 y 轴数据,歌曲名称作为 x 轴数据,歌手名称作为标签。
完整代码如下:
```python
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
# 请求头信息
headers = {
'Referer': 'https://music.163.com/',
'Host': 'music.163.com',
'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'}
# 歌曲排行榜 URL
url = 'https://music.163.com/discover/toplist?id=3778678'
# 发送 GET 请求
response = requests.get(url, headers=headers)
# 解析 HTML
soup = BeautifulSoup(response.text, 'html.parser')
song_list = soup.find('tbody').find_all('tr')
# 获取前100首歌曲的名称和歌手
songs = []
for song in song_list[:100]:
song_name = song.find('b').get('title')
artist_name = song.find('span', class_='s-fc8').get('title')
songs.append({'song_name': song_name, 'artist_name': artist_name})
# 获取前100首歌曲的播放量
play_counts = []
for song in songs:
search_url = f'https://music.163.com/api/search/get/web?csrf_token=&type=1&s={song["song_name"]}&limit=1&offset=0'
response = requests.get(search_url, headers=headers)
data = response.json()
play_count = data['result']['songs'][0]['playedNum']
play_counts.append(int(play_count))
# 设置图形的大小
plt.figure(figsize=(20, 8))
# 设置 x 轴和 y 轴的数据
x_data = [song['song_name'] for song in songs]
y_data = play_counts
# 生成柱状图
plt.bar(x_data, y_data)
# 设置 x 轴标签旋转角度
plt.xticks(rotation=90)
# 设置标题和标签
plt.title('网易云热门歌曲前100名播放量排行榜')
plt.xlabel('歌曲名称')
plt.ylabel('播放量')
# 显示图形
plt.show()
```
运行以上代码后,会显示出网易云热门歌曲前100名的播放量排行榜柱状图。
阅读全文