网易云音乐爬虫实战——肖战《红梅赞》下评论数据挖掘与分析

  • 前言
  • 本章工具
  • 数据挖掘部分
    • 1.获取歌曲评论
    • 2.根据ID获取用户信息
  • 数据分析部分
    • 1.评论数时间分布
    • 2.评论内容词云
    • 3.年龄分布柱状图
    • 4.性别分布饼图
    • 5.热评分析
  • 结语

前言

这个学期终于结束,空余时间慢慢多了。正逢最近肖战余温又起,不如拿网易云练练手,蹭蹭这波热度。让我们本着科学的精神,用python爬虫和数据可视化来分析一下,究竟是怎样一首翻唱能在不到三个月内获得网易云评论100万+的成就。
本文以2020年7月1日0:00-23.59网易云歌曲“肖战 《红梅赞》”下评论进行分析。

本章工具

  • pycharm编译器
  • python3.7环境
  • 来自Binaryify的网易云音乐API这里是他的GitHub主页
  • 重要第三方库:requests、pandas、pyecharts等

这里重点感谢一下Binaryify的API,应该是目前最优秀的网易云音乐API,功能非常强大且相比于官方API不容易被封

数据挖掘部分

1.获取歌曲评论

最开始用的官方API:http://music.163.com/api/v1/resource/comments/R_SO_4_1439975538,但是因为网易云的反爬虫机制,会出现以下错误
然后就找到了Binaryify开发的NeteaseCloudMusicApi,这里再次感谢Binaryify的开发与维护。

# 获取URL
def get_url(Offset):url = 'http://localhost:3000/comment/music?id=1439975538&offset=' + str(Offset * 20) + '&limit=20'return url# 获取评论
def get_20_imf(now_url):r = requests.get(now_url, headers=headers)# 评论信息result = r.json()['comments']# 用户IDuser_ID = [n['user']['userId'] for n in result]# 用户名user_name = [n['user']['nickname'] for n in result]# 评论时间content_time = [n['time'] for n in result]# 评论内容content = [n['content'] for n in result]# 点赞数like_count = [n['likedCount'] for n in result]imf = pd.DataFrame({'userID': user_ID,'user_name': user_name,'content_time': content_time,'content': content,'like_count': like_count})return imf#存入本地csv文件
HMZ = pd.DataFrame()
for i in range(60):  # 每次最多60页url = get_url(i)imf = get_20_imf(url)HMZ = HMZ.append(imf, ignore_index=True)print(i)# 休眠一秒time.sleep(1)
HMZ.to_csv('D:\\HMZ7.csv', sep=',', header=True, index=True)


顺利爬取评论信息,对部分格式进行处理

def IdTrans(userID):"""ID去小数点变字符串"""userID = str(int(userID))return userID
data_hmz['userID'] = data_hmz['userID'].apply(lambda x: IdTrans(x))def likedTrans(like_count):"""点赞数去小数点"""like_count = int(like_count)return like_count
data_hmz['like_count'] = data_hmz['like_count'].apply(lambda x: likedTrans(x))def timeTrans(content_time):"""时间变为时分秒格式"""second = float(content_time / 1000)timeArray = time.localtime(second)content_time = time.strftime("%Y-%m-%d %H:%M:%S", timeArray)return content_time
data_hmz['content_time'] = data_hmz['content_time'].apply(lambda x: timeTrans(x))

处理过后:

最终合并7月1日当天评论信息数据共2717条。

2.根据ID获取用户信息

从上文得到的评论信息提取‘userId’字段,获取用户的公开数据。这里用到另一个接口:
主要代码:

def get_user(user_id):# 获取用户信息data = {}url = 'http://localhost:3000/user/detail?uid=' + str(user_id)response = requests.get(url=url, headers=headers)js = json.loads(response.text)if js['code'] == 200:# 性别data['gender'] = js['profile']['gender']if int(js['profile']['birthday']) < 0:# 年龄data['age'] = 0else:data['age'] = (2020 - 1970) - (int(js['profile']['birthday']) // (1000 * 365 * 24 * 3600))if int(data['age']) < 0:data['age'] = 0# 省份data['city'] = js['profile']['province']# 签名data['sign'] = js['profile']['signature']else:data['gender'] = '无'data['age'] = '无'data['city'] = '无'data['sign'] = '无'return data

用户信息:

用户信息爬取完成,共515条用户信息。这也意味着7月1日当天产生的2717条评论来自于515名网易云用户,人均5.3条评论。

数据分析部分

1.评论数时间分布

评论热度按小时分布画出折线图:


data_hmz['content_time'] = pd.to_datetime(data_hmz['content_time'])
hmzHour = data_hmz.content_time.dt.hour
hour_num = hmzHour.value_counts().sort_index()
hs = [str(h) for h in hour_num.index.tolist()]# 折线图
line1 = (Line(init_opts=opts.InitOpts(width='1350px', height='350px')).add_xaxis(hs).add_yaxis('热度', hour_num.values.tolist(), label_opts=opts.LabelOpts(is_show=False)).set_global_opts(title_opts=opts.TitleOpts(title='评论数时间(按小时分布)'), visualmap_opts=opts.VisualMapOpts(max_=350)).set_series_opts(linestyle_opts=opts.LineStyleOpts(width=3)))
line1.render()


可以发现评论的时间主要集中在晚上8点到12点,并且呈现出比较明显的三级分布:

  • 0时-8时:低
  • 8时-20时:中,平均每小时评论数100条左右
  • 20时-24时:高,平均每小时300条左右

可以看出此歌受众者很多有睡前(20-24时)听歌的习惯,休息时间(0-8时)、工作与学习时间(8-20时)听歌频率较少。

2.评论内容词云

这里用到jieba库进行中文分词,wordcloud库绘制词云图片:

ata_hmz = pd.read_csv('data_hmz.csv')
cList = data_hmz.content.value_counts().sort_index().index.tolist()
text = " ".join(cList)# 用jieba中文分词
jieba.load_userdict("dict.txt")
wordlist_jieba = jieba.lcut(text, cut_all=True)
wl_space_split = " ".join(wordlist_jieba)
# 绘图
my_wordcloud = wordcloud.WordCloud(background_color='white',width=1000,height=700,font_path='msyh.ttc',max_words=2000,scale=20,# 优化虚词stopwords={'什么','我们','你们','不是','就是','自己'})
my_wordcloud.generate(wl_space_split)
my_wordcloud.to_file('词云.png')


观察词云图片,大部分词应该出自肖战粉丝之口,如“哥哥”、“粉丝”、“加油”、“顺利”等。也有部分负面词语:“举报”、“抵制”、“讨厌肖战”、以及最近获得的金“扫帚”奖等

3.年龄分布柱状图

绘图分析年龄分布情况:

# 分箱
age_num['age_cut'] = pd.cut(age_num.age, bins=[10, 15, 20, 25, 30, 35, 40, 45])# 分组汇总
age_cut_num = age_num.groupby('age_cut')['num'].sum()# 绘图
bar1 = Bar(init_opts=opts.InitOpts(width='1350px', height='750px'))
bar1.add_xaxis(age_cut_num.index.astype('str').tolist())
bar1.add_yaxis("数量", age_cut_num.tolist(), category_gap='20%')
bar1.set_global_opts(title_opts=opts.TitleOpts(title='评论用户年龄分布'),visualmap_opts=opts.VisualMapOpts(max_=180),toolbox_opts=opts.ToolboxOpts())
bar1.render()



年龄分布情况有点让我吃惊,高达74%的用户年龄无法查看——或是为了保护隐私,或是因为网易云社区风气,或是没有设置这些信息。
在已知的年龄信息中可以看到,主要年龄集中在(15,20]区间内,说明主要受众是15-20岁学生群体。另一个有趣的信息是频数第一的年龄为30岁,(25,30]区间也是肖战粉丝的主力军,难道这就是妈妈粉的由来?[/滑稽]

4.性别分布饼图

将性别数据绘成饼图:

pie1 = Pie(init_opts=opts.InitOpts(width='1200px',height='600px'))
pie1.add("",[*zip(['女', '未知', '男'],gender_percent.values)],radius=["40%", "65%"])
pie1.set_global_opts(title_opts=opts.TitleOpts(title='评论用户性别分布'),legend_opts=opts.LegendOpts(orient="vertical", pos_top="15%", pos_left="2%"),toolbox_opts=opts.TitleOpts())
pie1.set_series_opts(label_opts=opts.LabelOpts(formatter="{b} : {c}%"))
pie1.set_colors(['#D7655A', '#FFAF34', '#3B7BA9', '#EF9050', '#6FB27C'])
pie1.render()


性别分布比较明显,女性比例达55%,男性则不到20%,还有约25%用户没有公开性别信息。

综上,评论用户以15-20岁女性为主,男女比例约为11:4,评论中粉丝发言比例很高,语言较积极。所以,肖战凉了这个结论现在还为时尚早。

5.热评分析


肖战翻唱《红梅赞》版本下热评可谓魔幻。
15条热评全部发表在4月13日歌曲发布的7分钟内,且全部为高度赞扬的正面评价,共收获184.1万点赞。
其中4条热评甚至发表于歌曲发布3分钟内,而歌曲时长却大于3分钟。这意味着歌还没有播放完评论就已经发出,并且成为了点赞数最多的15条评论之一。

结语

说到红梅赞,这首闫肃作词的爱国歌曲,曾经是歌剧《江姐》的主题歌。5天前的6月27日,《烈火中永生》中江姐的扮演者于蓝奶奶永远地离开了我们。
在这个流量至上的时代,希望这种“流量焦点”的粉丝,能多去了解歌曲背后的故事,而不是单纯盲目地追求明星与流量、数据。
最后,本文仅为一次对网易云音乐的python爬虫实战,不针对任何人或事件,请勿上升高度。

网易云音乐爬虫实战——肖战《红梅赞》下评论数据挖掘与分析相关推荐

  1. go post 参数_go语言实现网易云音乐爬虫

    前言 最近在学习go,学习一门语言最好的方式就是实践,之前学习python也是从爬虫入手,现在使用go语言写一个网易云音乐的爬虫,下面会简单介绍开发的过程,代码是初学者的水平,欢迎吐槽. 本项目git ...

  2. Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户、物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据、人工智能、机器学习项目开发

    Java语言开发在线音乐推荐网 音乐推荐系统 网易云音乐爬虫 基于用户.物品的协同过滤推荐算法 SSM(Spring+SpringMVC+Mybatis)框架 大数据.人工智能.机器学习项目开发Mus ...

  3. python爬虫实例网易云-Python3爬虫实例之网易云音乐爬虫

    本篇文章给大家带来的内容是Python3爬虫实例之网易云音乐爬虫.有一定的参考价值,有需要的朋友可以参考一下,希望对你们有所帮助. 此次的目标是爬取网易云音乐上指定歌曲所有评论并生成词云 具体步骤: ...

  4. python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论

    ** python3爬虫进阶之自动登录网易云音乐并爬取指定歌曲评论 ** 一.访问网易云首页,找到所需元素的位置 用浏览器打开网易云首页https://music.163.com/之后,发现我们要找的 ...

  5. angular8 | 网易云音乐项目实战(一)

    angular8 网易云音乐项目实战(一) 视频教程原地址:https://www.bilibili.com/video/av70355308 本文为学习笔记 从github上clone相关源码 cs ...

  6. 关于网易云音乐爬虫的api接口?

    抓包能力有限,分析了一下网易云音乐的一些api接口,但是关于它很多post请求都是加了密,没有弄太明白.之前在知乎看到过一个豆瓣工程师写的教程,但是被投诉删掉了,请问有网友fork了的吗?因为我觉得他 ...

  7. 网易云音乐爬虫 数据可视化分析

    网易云音乐爬虫 & 数据可视化分析 1. 数据爬取 1.1 评论爬取 1.2 用户信息爬取 2 数据清洗 & 可视化 歌评文本分析 个人博客:Archiew's blog 源码:htt ...

  8. Python网易云音乐爬虫大数据分析可视化系统——大屏数据可视化开发之路

    介绍 现在比较流行的大数据数据可视化都是大屏,有钱的人会使用阿里云全家桶的DataV或者商业化的大屏解决方案,但是在国内还是小公司比较多,本人50年大数据开发经验,精通数据可视化,曾经处理过百万亿级别 ...

  9. 网易云音乐爬虫代码示例

    网易云音乐爬虫代码示例 以下是代码示例 import os import requests from bs4 import BeautifulSoupurl = 'https://music.163. ...

最新文章

  1. at24c16如何划分出多个读写区_如何1分钟遍历100T数据?
  2. 识骨寻踪:少年,我看你骨骼清奇,不如来看看这本书。
  3. openssl在64位的机器上编译32位的库
  4. springboot学习笔记(十)
  5. window7 MySql Cluster数据库集群配置
  6. 【ArcGIS风暴】ArcGIS解决数字化之前创建图层时未定义坐标系而导致数据跑偏的问题
  7. Introduce Null Object(引入Null 对象)
  8. Windows下使用TeamViewer连接远程服务器,以及解决“远程桌面关闭后TeamViewer不能连接”的问题
  9. Android中的Can't create handler inside thread that has not called Looper.prepare()异常
  10. 实验三 函数的最值与导数
  11. 获取连接设备的SN号
  12. ZOOM join meeting提示密码错误
  13. 单精度浮点数和双精度浮点数_浮点数和双精度数之间的区别
  14. FPGA图像工程师的六脉神剑——“选扫掌仿习练”
  15. USB过压过流保护IC
  16. 卿斯汉:未来是公有云的天下
  17. 《毕业生》系列之四 霸面天源迪科
  18. Python程序员的自我修养
  19. 51单片机太阳能风能风光互补路灯控制器设计
  20. 通俗易懂带你了解Java多线程处理

热门文章

  1. 潘超和你聊 DeFi
  2. A Game of Thrones(55)
  3. 结对-象棋游戏-设计文档
  4. HTTP超文本传输协议分析
  5. python 量化策略回测_在python中创建和回测对交易策略
  6. 互联网企业数据安全体系建设(美团点评)
  7. 超频心得8:最简单超频调试之映泰TA770A2+SE
  8. 超导系统与服务器断开,HT一7超导托卡马克总控系统的设计与实现.pdf
  9. Html5笔记之第一天
  10. Android卡顿分析中常见的log