爬取QQ音乐热门歌曲前100名并做出柱状图可视化分析,代码给注释,给出程序设计思路
时间: 2023-09-11 09:05:21 浏览: 197
### 回答1:
程序设计思路:
1. 导入所需库:requests、beautifulsoup4、pyecharts。
2. 使用requests库访问QQ音乐热歌榜页面,获取页面源代码。
3. 使用beautifulsoup4库解析页面源代码,获取热歌榜前100名歌曲的歌名、歌手和专辑。
4. 使用pyecharts库绘制柱状图,将热歌榜前100名歌曲的播放量作为y轴数据,歌名作为x轴数据,生成柱状图并保存。
代码如下:
### 回答2:
程序设计思路:
1. 首先需要使用Python的爬虫库(如requests、beautifulsoup、selenium等)发送HTTP请求,获取QQ音乐热门歌曲的页面HTML源代码。
2. 使用正则表达式或者网页解析库(如beautifulsoup、lxml等)解析HTML源代码,提取出热门歌曲的信息(如歌曲名称、歌手、排名等)。
3. 将提取到的热门歌曲信息存储到一个列表或字典中。
4. 使用数据可视化库(如matplotlib、seaborn等)绘制柱状图,将热门歌曲的排名和歌曲名称作为横纵坐标进行可视化分析。
5. 通过调整柱状图的颜色、坐标轴显示等参数,使得图形更加清晰美观。
6. 运行程序,得到QQ音乐热门歌曲前100名的柱状图可视化分析结果。
以下是示例程序代码:
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
# 爬取QQ音乐热门歌曲的页面HTML源代码
url = 'https://y.qq.com/portal/toplist.html'
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)
html = response.text
# 使用beautifulsoup解析HTML源代码,提取热门歌曲信息
soup = BeautifulSoup(html, 'lxml')
songs = soup.find_all('li', class_='js_song')
# 将热门歌曲信息存储到字典中
top_songs = {}
for song in songs:
rank = song.find(class_='top_num').get_text()
name = song.find(class_='js_song').get('title')
top_songs[rank] = name
# 提取前100名热门歌曲
top100_songs = dict(list(top_songs.items())[:100])
# 提取歌曲排名和歌曲名称
ranks = list(top100_songs.keys())
names = list(top100_songs.values())
# 绘制柱状图
plt.bar(ranks, names)
plt.xlabel('Rank')
plt.ylabel('Song Name')
plt.title('Top 100 Popular Songs on QQ Music')
plt.xticks(rotation=90) # 旋转横坐标标签,避免重叠
plt.tight_layout() # 自动调整图像边缘,避免标签被裁剪
plt.show()
### 回答3:
程序设计思路:
1. 导入必要的库和模块,如requests、BeautifulSoup、matplotlib等。
2. 发起HTTP请求,从QQ音乐热门歌曲榜单页面获取网页源代码。
3. 使用BeautifulSoup库解析网页源代码,提取出热门歌曲的相关信息,如歌曲名称、歌手名称等。
4. 将热门歌曲的相关信息保存到列表或字典中。
5. 根据热门歌曲的播放量、下载量等指标,对热门歌曲进行排序。
6. 取前100首热门歌曲,将其歌曲名称和播放量分别保存到两个列表中。
7. 使用matplotlib库绘制柱状图,将歌曲名称作为x轴,播放量作为y轴。
8. 设置图表标题和标签,添加适当的颜色和样式,展示柱状图。
9. 输出柱状图可视化分析结果。
示例代码:
```python
import requests
from bs4 import BeautifulSoup
import matplotlib.pyplot as plt
def get_top_songs():
url = 'https://y.qq.com/w/toplist.html?ADTAG=myqq'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
song_list = soup.find_all('div', class_='songlist__item')
top_songs = []
for song in song_list:
rank = int(song.find('span', class_='songlist__ranking_num').text)
title = song.find('span', class_='songlist__songname_txt').text
artist = song.find('span', class_='songlist__artist').text
top_songs.append({'rank': rank, 'title': title, 'artist': artist})
return top_songs
def plot_top_songs(top_songs):
titles = [song['title'] for song in top_songs[:100]]
plays = [song['rank'] for song in top_songs[:100]]
plt.bar(titles, plays)
plt.xticks(rotation=90)
plt.xlabel('歌曲名称')
plt.ylabel('播放量')
plt.title('QQ音乐热门歌曲前100名播放量')
plt.show()
if __name__ == '__main__':
top_songs = get_top_songs()
plot_top_songs(top_songs)
```
该程序首先通过发送HTTP请求,获取QQ音乐热门歌曲榜单页面的网页源代码。然后使用BeautifulSoup库解析网页源代码,提取出歌曲的排名、名称、歌手等信息。根据歌曲的播放量进行排序,取前100首热门歌曲,并将其名称和播放量保存到两个列表中。最后,使用matplotlib库绘制柱状图,展示热门歌曲的播放量情况。
阅读全文