加入收藏 | 设为首页 | 会员中心 | 我要投稿 宿州站长网 (https://www.0557zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Python数据可视化:网易云音乐歌单

发布时间:2019-01-28 09:48:26 所属栏目:教程 来源:小F
导读:副标题#e# 网易云音乐2018年度听歌报告遇见你,真好。 相信有不少人在上周,应该已经看过自己网易云音乐的年度报告了。 小F也是去凑凑热闹,瞅了一波自己的年度听歌报告。 那么你在云村又听了多少首歌,听到最多的歌词又是什么呢? 2018年你的年度歌手又是谁
副标题[/!--empirenews.page--]

网易云音乐2018年度听歌报告—遇见你,真好。

相信有不少人在上周,应该已经看过自己网易云音乐的年度报告了。

小F也是去凑凑热闹,瞅了一波自己的年度听歌报告。

那么你在云村又听了多少首歌,听到最多的歌词又是什么呢?

2018年你的年度歌手又是谁,哪些又是你最爱的歌呢?

不过相比去年,我的票圈并没有很多发自己年度报告的朋友。

不得不说,版权之争开始,网易云音乐似乎就在走下坡路。

很多喜欢的歌听不了,这应该是大家共同的痛点。

最大的印象就是周董的歌,在愚人节时下架了,原以为只是个玩笑,不想却是真的。

本次通过对网易云音乐华语歌单数据的获取,对华语歌单数据进行可视化分析。

可视化库不采用pyecharts,来点新东西。

使用matplotlib可视化库,利用这个底层库来进行可视化展示。

一、网页分析

01 歌单索引页

Python数据可视化:网易云音乐歌单

选取华语热门歌单页面。

获取歌单播放量,名称,及作者,还有歌单详情页链接。

本次一共获取了1302张华语歌单。

02 歌单详情页

Python数据可视化:网易云音乐歌单

获取歌单详情页信息,信息比较多。

有歌单名,收藏量,评论数,标签,介绍,歌曲总数,播放量,收录的歌名。

这里歌曲的时长、歌手、专辑信息在网页的iframe中。

需要用selenium去获取信息,鉴于耗时过长,小F选择放弃...

有兴趣的小伙伴,可以试一下哈...

二、数据获取

01 歌单索引页

  1. from bs4 import BeautifulSoup 
  2. import requests 
  3. import time 
  4.  
  5. headers = { 
  6.     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
  7.  
  8. for i in range(0, 1330, 35): 
  9.     print(i) 
  10.     time.sleep(2) 
  11.     url = 'https://music.163.com/discover/playlist/?cat=欧美&order=hot&limit=35&offset=' + str(i) 
  12.     response = requests.get(url=url, headers=headers) 
  13.     html = response.text 
  14.     soup = BeautifulSoup(html, 'html.parser') 
  15.     # 获取包含歌单详情页网址的标签 
  16.     ids = soup.select('.dec a') 
  17.     # 获取包含歌单索引页信息的标签 
  18.     lis = soup.select('#m-pl-container li') 
  19.     print(len(lis)) 
  20.     for j in range(len(lis)): 
  21.         # 获取歌单详情页地址 
  22.         url = ids[j]['href'] 
  23.         # 获取歌单标题 
  24.         title = ids[j]['title'] 
  25.         # 获取歌单播放量 
  26.         play = lis[j].select('.nb')[0].get_text() 
  27.         # 获取歌单贡献者名字 
  28.         user = lis[j].select('p')[1].select('a')[0].get_text() 
  29.         # 输出歌单索引页信息 
  30.         print(url, title, play, user) 
  31.         # 将信息写入CSV文件中 
  32.         with open('playlist.csv', 'a+', encoding='utf-8-sig') as f: 
  33.             f.write(url + ',' + title + ',' + play + ',' + user + 'n')

获取歌单索引页信息如下,共1302张华语歌单。

Python数据可视化:网易云音乐歌单

02、歌单详情页

  1. from bs4 import BeautifulSoup 
  2. import pandas as pd 
  3. import requests 
  4. import time 
  5.  
  6. df = pd.read_csv('playlist.csv', header=None, error_bad_lines=False, names=['url', 'title', 'play', 'user']) 
  7.  
  8. headers = { 
  9.     'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36' 
  10.  
  11. for i in df['url']: 
  12.     time.sleep(2) 
  13.     url = 'https://music.163.com' + i 
  14.     response = requests.get(url=url, headers=headers) 
  15.     html = response.text 
  16.     soup = BeautifulSoup(html, 'html.parser') 
  17.     # 获取歌单标题 
  18.     title = soup.select('h2')[0].get_text().replace(',', ',') 
  19.     # 获取标签 
  20.     tags = [] 
  21.     tags_message = soup.select('.u-tag i') 
  22.     for p in tags_message: 
  23.         tags.append(p.get_text()) 
  24.     # 对标签进行格式化 
  25.     if len(tags) > 1: 
  26.         tag = '-'.join(tags) 
  27.     else: 
  28.         tag = tags[0] 
  29.     # 获取歌单介绍 
  30.     if soup.select('#album-desc-more'): 
  31.         text = soup.select('#album-desc-more')[0].get_text().replace('n', '').replace(',', ',') 
  32.     else: 
  33.         text = '无' 
  34.     # 获取歌单收藏量 
  35.     collection = soup.select('#content-operation i')[1].get_text().replace('(', '').replace(')', '') 
  36.     # 歌单播放量 
  37.     play = soup.select('.s-fc6')[0].get_text() 
  38.     # 歌单内歌曲数 
  39.     songs = soup.select('#playlist-track-count')[0].get_text() 
  40.     # 歌单评论数 
  41.     comments = soup.select('#cnt_comment_count')[0].get_text() 
  42.     # 输出歌单详情页信息 
  43.     print(title, tag, text, collection, play, songs, comments) 
  44.     # 将详情页信息写入CSV文件中 
  45.     with open('music_message.csv', 'a+', encoding='utf-8-sig') as f: 
  46.         f.write(title + ',' + tag + ',' + text + ',' + collection + ',' + play + ',' + songs + ',' + comments + 'n') 
  47.     # 获取歌单内歌曲名称 
  48.     li = soup.select('.f-hide li a') 
  49.     for j in li: 
  50.         with open('music_name.csv', 'a+', encoding='utf-8-sig') as f: 
  51.             f.write(j.get_text() + 'n') 

(编辑:宿州站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章