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

Stella981
• 阅读 650

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

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

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

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

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

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

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

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

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

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

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

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

/ 01 / 网页分析

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

01 歌单索引页

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

选取华语热门歌单页面。

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

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

02 歌单详情页

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

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

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

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

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

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

/ 02 / 数据获取

01 歌单索引页

from bs4 import BeautifulSoupimport requestsimport timeheaders = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}for i in range(0, 1330, 35): print(i) time.sleep(2) url = 'https://music.163.com/discover/playlist/?cat=欧美&order=hot&limit=35&offset=' + str(i) response = requests.get(url=url, headers=headers) html = response.text soup = BeautifulSoup(html, 'html.parser') # 获取包含歌单详情页网址的标签 ids = soup.select('.dec a') # 获取包含歌单索引页信息的标签 lis = soup.select('#m-pl-container li') print(len(lis)) for j in range(len(lis)): # 获取歌单详情页地址 url = ids[j]['href'] # 获取歌单标题 title = ids[j]['title'] # 获取歌单播放量 play = lis[j].select('.nb')[0].get_text() # 获取歌单贡献者名字 user = lis[j].select('p')[1].select('a')[0].get_text() # 输出歌单索引页信息 print(url, title, play, user) # 将信息写入CSV文件中 with open('playlist.csv', 'a+', encoding='utf-8-sig') as f: f.write(url + ',' + title + ',' + play + ',' + user + '
')

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

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

02 歌单详情页

from bs4 import BeautifulSoupimport pandas as pdimport requestsimport timedf = pd.read_csv('playlist.csv', header=None, error_bad_lines=False, names=['url', 'title', 'play', 'user'])headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}for i in df['url']: time.sleep(2) url = 'https://music.163.com' + i response = requests.get(url=url, headers=headers) html = response.text soup = BeautifulSoup(html, 'html.parser') # 获取歌单标题 title = soup.select('h2')[0].get_text().replace(',', ',') # 获取标签 tags = [] tags_message = soup.select('.u-tag i') for p in tags_message: tags.append(p.get_text()) # 对标签进行格式化 if len(tags) > 1: tag = '-'.join(tags) else: tag = tags[0] # 获取歌单介绍 if soup.select('#album-desc-more'): text = soup.select('#album-desc-more')[0].get_text().replace('
', '').replace(',', ',') else: text = '无' # 获取歌单收藏量 collection = soup.select('#content-operation i')[1].get_text().replace('(', '').replace(')', '') # 歌单播放量 play = soup.select('.s-fc6')[0].get_text() # 歌单内歌曲数 songs = soup.select('#playlist-track-count')[0].get_text() # 歌单评论数 comments = soup.select('#cnt_comment_count')[0].get_text() # 输出歌单详情页信息 print(title, tag, text, collection, play, songs, comments) # 将详情页信息写入CSV文件中 with open('music_message.csv', 'a+', encoding='utf-8-sig') as f: f.write(title + ',' + tag + ',' + text + ',' + collection + ',' + play + ',' + songs + ',' + comments + '
') # 获取歌单内歌曲名称 li = soup.select('.f-hide li a') for j in li: with open('music_name.csv', 'a+', encoding='utf-8-sig') as f: f.write(j.get_text() + '
')

获取的1302张华语歌单的详情。

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

1302张歌单里的121118首歌。

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

/ 03 / 数据可视化

可视化代码已上传GitHub,点击左下角阅读原文即可访问!!!

01 歌曲出现次数 TOP10

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

榜上的十首歌,除了「水星记」,小F听得次数都不少。

那么你又是如何的呢?

在小F的印象里,这些歌都曾在网易云音乐热歌榜的榜首出现过。

02 歌单贡献UP主 TOP10

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

10大歌单贡献UP主,感谢这些辛勤的“搬运工”,给大家带来优质的歌单。

给广大懒人癌患者,亦或选择困难症患者,带来福利。

03 歌单播放量 TOP10

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

歌单播放量前十名单,第一名7000多万播放量。

其实matplotlib生成的图是挺清楚的,只不过一上传就变模糊了。

所以这里你可能会觉得图片质量不行...

其实并不是,为此小F做了相应的图表,具体见文末~

04 歌单收藏量 TOP10

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

同样是好东西,收藏收藏!!!

有一些歌单和播放量TOP10里歌单有重复。

05 歌单评论数 TOP10

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

歌单「再见大侠:武侠小说泰斗金庸逝世」评论数最多。

相信不少人的阅读时光,就是与金庸前辈的武侠小说一起度过。

飞雪连天射白鹿,笑书神侠倚碧鸳。

还有由小说改编成的电视剧,都是经典!!!

小F武侠小说看的少,武侠电视剧看的多...

06 歌单收藏数量分布情况

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

将收藏数做对数处理,使得能直观看出歌单收藏数的分布。

主要分布在0-15万之间(ln(150000)=12)。

07 歌单播放数量分布情况

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

歌单播放数主要分布在0-1000万。

其中ln(10000000)=16。

08 歌单标签图

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

既然选取的是华语歌单,那么华语这二字必不可少,而且还占大头。

那么就看看除了华语,还有什么其他标签。

「流行」没啥好说的。

「古风」「说唱」「民谣」近些年来热度是越来越高,不过也有玩坏的时候。

比如「离人愁」、「一人我饮酒醉」,小F作为吃瓜群众,只能说且行且珍惜...

09 歌单介绍词云图

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

歌单介绍词云图,希望你能找到你喜欢某首歌的原因!!!

到底是希望,还是青春,亦或是回忆呢?

/ 04 / 总结

最后,把本次搜刮的干货,分享给大家。

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

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

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这