抓取网易云音乐歌曲热门评论生成词云

简介: 前言抓数据抓包分析加密信息处理抓取热门评论内容词云词云运行效果总结前言网易云音乐一直是我向往的“神坛“,听音乐看到走心的评论的那一刻,高山流水。

镇楼图(刚好遇见你--词云)

前言

网易云音乐一直是我向往的“神坛“,听音乐看到走心的评论的那一刻,高山流水。于是今天来抓取一下歌曲的热门评论。并做成词云来展示,看看相对于这首歌最让人有感受的评论内容是什么。

做成词云的好处就是直观以及美观, 其他的我也想不出来有什么了。

抓数据

要想做成词云,首先得有数据才行。于是需要一点点的爬虫技巧。

  • 抓包分析
  • 加密信息处理
  • 抓取热门评论内容

抓包分析

使用Chrome控制台。我们可以轻松的找到评论所在的链接。如下图:
抓包分析

现在URL算是找到了,下一步就是进行数据抓取了。但是简单尝试了一下,发现并不能获取到详细的信息,而是返回了空空的字符串。
再次查看hreaders的信息,发现浏览器使用的是POST的方式进行的请求。具体字段如下图:
具体POST字段内容

加密信息处理

然后经过我的测试,直接把浏览器上这俩数据拿过来就可以。但是要想真正的解决这个加密处理,还需要有点加解密的只是存储。GitHub上有大牛分析了网易云音乐的字段加密的详情。有兴趣的可以参照下面的链接。

网易云音乐新登录API分析

这里我就使用这么个临时的方法好了,而且对于不同的歌曲是可以重用的。待会我们可以验证一下。

抓取热门评论内容

从第一步拿到了接口,而返回的数据就是一个JSON字符串,获取一下稍作处理即可使用。

# coding: utf8

# @Author: 郭 璞
# @File: 网易云音乐歌曲热门评论.py                                                                 
# @Time: 2017/4/26                                   
# @Contact: 1064319632@qq.com
# @blog: http://blog.csdn.net/marksinoberg
# @Description: 热门评论获取

import requests
import json

def getcomments(musicid):
    url = 'http://music.163.com/weapi/v1/resource/comments/R_SO_4_{}?csrf_token=5594eaee83614ea8ca9017d85cd9d1b3'.format(musicid)
    payload = {
        'params': '4hmFbT9ZucQPTM8ly/UA60NYH1tpyzhHOx04qzjEh3hU1597xh7pBOjRILfbjNZHqzzGby5ExblBpOdDLJxOAk4hBVy5/XNwobA+JTFPiumSmVYBRFpizkWHgCGO+OWiuaNPVlmr9m8UI7tJv0+NJoLUy0D6jd+DnIgcVJlIQDmkvfHbQr/i9Sy+SNSt6Ltq',
        'encSecKey': 'a2c2e57baee7ca16598c9d027494f40fbd228f0288d48b304feec0c52497511e191f42dfc3e9040b9bb40a9857fa3f963c6a410b8a2a24eea02e66f3133fcb8dbfcb1d9a5d7ff1680c310a32f05db83ec920e64692a7803b2b5d7f99b14abf33cfa7edc3e57b1379648d25b3e4a9cab62c1b3a68a4d015abedcd1bb7e868b676'
    }
    headers = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36',
        'Referer': 'http://music.163.com/song?id={}'.format(musicid),
        'Host': 'music.163.com',
        'Origin': 'http://music.163.com'
    }

    response = requests.post(url=url, headers=headers, data=payload)
    data = json.loads(response.text)
    hotcomments = []
    for hotcomment in data['hotComments']:
        item = {
            'nickname': hotcomment['user']['nickname'],
            'content': hotcomment['content']
        }
        hotcomments.append(item)

    # 返回热门评论
    return [content['content'] for content in hotcomments]

if __name__ == '__main__':
    hot = getcomments(439915614)
    print(hot)

看下运行的结果吧。

['初恋很单纯,跟她好了快一年了,终于带她回家见家长。席间老妈不停的给她夹菜,“闺女,来,吃完了待会让他送你回去”。女友可能是误会我妈的意思了,立马放下碗筷,一脸委屈“叔叔阿姨你们别赶我走,我是真心喜欢他的,我以后少吃点”。听到女友说这句话,心瞬间化了。', '李玉刚合唱团已上线,女高音李玉刚、女低音李玉刚、男高音李玉刚、男低音李玉刚[大笑][大笑][大笑]', '2012年,那年大一,军训,我们相识。异乡的冬天冻伤了她的初恋,我却没有理由给她一个安慰的拥抱。此后的日子我们依然是朋友,偶尔碰面寒暄,而后走散在汹涌的人潮。她又有了一个他,继而凋谢。2015年,大三。我们一起散步,夜色的掩护下我向她表白了,她牵起我的手,哭着说:你终究说出来了。', '大学毕业后我去了北京,而她留在了老家,刚开始每天一个电话,后来越来越少,甚至断了联系,直到两年后的一次我坐火车回家,出了站之后看见她一个人站在外面,头发被风吹得很凌乱,看到我之后也没有动,我放下行李过去把她抱住,她立马大哭对我说我还以为你不要我了。那一刻起我就知道这辈子就是你。', '「刚」好「玉」见「李」', '96年离开家奔波闯荡,06年星光大道让全国观众认识了你,16年出道整十周年,你用十年时间向世界证明你不是当初那个初登央视舞台稚嫩的李玉刚,你是历经十年岁月积淀的玉先生,你是传播传统文化的先行者,你是摆脱桎梏追求艺术突破的追梦人  世界之大欣喜相逢 我们17日十周年演唱会见[亲亲]', '副歌有毒…画室今天放了三遍[大哭]第一次听这唱的什么鬼…第二次感觉还不错…第三次就开始中毒了拿起手机听歌识曲,单曲循环走起[大哭]', '曾经和一个女人躺在同一个床上一整夜,不是恋人。什么都没干,天南海北纯侃纯聊天。那天晚上我清唱了这首歌给她听。早上起来后,感觉双方之间亲密指数成几何增长到以前的n次方。现在,她是我的女人。再过几个月就结婚了。初恋,感谢刚好遇见你', '高一遇见他,考试的时候一见钟情,考试结束我去看了他桌子上的考号,他叫穆佳明,我喜欢他的名字,他去打球,不管多远我都会跑过去,他生病,我跑去买药,他运动会跑步,我去给他送水,用肚子暖好,我打针的时候知道他在附近打球,就跑过去,结果感冒加重,全世界都知道我很爱他,全世界都知道他不爱我', '相识7年,在一起却才8个月,怪我当初没有足够的勇气,没想到你会为我坚持那么久。感谢上天让我刚好遇见你,是你的坚持让我们最后能走在一起,希望你能在我的一生中留下漫长的回忆,我会珍惜这场来之不易的相遇。在今后的日子里,让我来给你走下去的勇气,给我机会保护你、呵护你,刘小瘦我爱你。。。', '大一异地,我放假早回来坐在网吧打魔兽,这首歌被点播了N遍,脑袋里有了简单的旋律:因为我刚好遇见你。   晚上抱着手机互说晚安,梦里梦到她了,现在刚醒,找到这首歌无限循环。  祝福所有异地恋终成眷属。[爱心]', '我们哭了,我们笑着。[大哭]开口就已经泪流满面,好怀念那段时光', '我用网易云音乐,当初的信任给她买的手机,给她安装了网易云登录了我的帐号,可她不怎么用,161222号她送走了我,至今虽然不再联系就在昨天我突然发现我喜欢的音乐列表内多了一首歌就是这首《刚好遇见你》。', '因为我刚好遇见你 距离高考还有一百四十多天 和你成为同学大概一年多了 没想到你居然偷偷喜欢了我很久 这次我们省模拟考总分一模一样 要填模拟志愿 你说大学的事就交给我了 你说我们可以去北方看雪吃火锅 你说我喜欢的专业都不错 你说我们很有缘 可是啊 最重要的那一句 你怎么不说呢', '那年你18,我20。我去酒店实习,下班,刚好遇见你……我不相信一见钟情,可你是例外。现在,我25,你23。感谢你,来我的世界,就不曾离开。明年,我们要结婚了']

词云

词云我使用的一个第三方库Wordcloud,可以使用pip进行安装。官网上有非常详细而且清晰的案例可供参考,这里就不重复的描述了。有兴趣的参考下面的链接。
https://amueller.github.io/word_cloud/auto_examples/index.html

下面就直接上代码好了。

但是官网也好,其他地方也罢,都没有说对于中文的处理。然后我找啊找啊的,终于找到了解决办法,那就是在WordCloud的构造方法上指定字体文件的路径。这样就可以解决中文乱码的问题了。具体设置如下:

WordCloud(random_state=1, font_path = r’C:/Users/Windows/fonts/simkai.ttf’)

# coding: utf8

# @Author: 郭 璞
# @File: 词云测试.py                                                                 
# @Time: 2017/4/26                                   
# @Contact: 1064319632@qq.com
# @blog: http://blog.csdn.net/marksinoberg
# @Description: 词云测试
from wordcloud import WordCloud

from temp import 网易云音乐歌曲热门评论 as hot
text = " ".join(hot.getcomments(439915614))

wordcloud = WordCloud(random_state=1, font_path = r'C:/Users/Windows/fonts/simkai.ttf').generate(text)

import matplotlib.pyplot as plt
plt.figure()
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis('off')
plt.show()


词云运行效果

最后来对比一下运行的效果。
网易云歌曲热门评论词云

总结

最后来回顾一下,文章针对网易云音乐的热门评论做了爬取,并通过词云生成器制作出了相对应的词云。

可以拓展的地方:

  • 词云mask,支持特定背景的词云生成
  • 热门评论批量爬取,只需要获取对应歌曲的ID即可。
  • 封装起来,提取接口,对外界提供热评服务,或者词云生成服务。
  • … …
目录
相关文章
|
XML 数据挖掘 Linux
服务器丨Linux安装测试单细胞分析软件copykat,遇到的常见报错与解决思路与方法
服务器丨Linux安装测试单细胞分析软件copykat,遇到的常见报错与解决思路与方法
|
存储 弹性计算 算法
手把手教你使用ECS服务器搭建RssHub服务,实现“万物皆可RSS”
在当今时代,大部分人已经无法离开互联网了,由于大数据的加持,各大平台一直在竭尽全力的想我们推送我们所感兴趣的内容,但是,这样势必会造成信息茧房。是使得我们的视野越来越窄,那么有没有什么办法能够解决这个问题呢?有!在互联网发展的早期,有一个叫做RSS(简易信息聚合)的东西,这个工具可以帮你整合一些网站上的内容,当网站内容发生更新时给与通知,有点类似一个关注列表,但是这个列表中可以包含各大平台的内容。使用RSS,你可以订阅自己喜欢的内容,从而拒绝各大平台的算法推荐。给你一个“自己决定看什么的机会”!
3193 2
手把手教你使用ECS服务器搭建RssHub服务,实现“万物皆可RSS”
|
7月前
|
人工智能 API 数据库
Semantic Kernel .NET 架构学习指南
本指南系统解析微软Semantic Kernel .NET架构,涵盖核心组件、设计模式与源码结构,结合实战路径与调试技巧,助你从入门到贡献开源,掌握AI编排开发全栈技能。
815 2
|
SQL
SQL语句多个表查询,inner join的用法
SQL语句多个表查询,inner join的用法
827 0
|
tengine 应用服务中间件 Linux
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
【Linux环境】如何在Nginx(或Tengine)服务器上安装ssl证书----介绍nginx服务器类型证书的下载与安装操作
1196 0
|
前端开发 JavaScript
保姆级教程:从零构建GitHub Pages静态网站(上)
保姆级教程:从零构建GitHub Pages静态网站
8322 0
|
数据采集 机器学习/深度学习 数据可视化
R实战| PCA、tSNE、UMAP三种降维方法在R中的实现
R实战| PCA、tSNE、UMAP三种降维方法在R中的实现
945 0
|
Web App开发 Android开发
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
实时数据传输在互联网中至关重要,不仅支持即时通讯如QQ、微信的文字与图片传输,还包括音视频通信。一对一通信常采用WebRTC技术,如《Android Studio开发实战》中的App集成示例;而一对多的在线直播则需部署独立的流媒体服务器,使用如SRT等协议。SRT因其优越的直播质量正逐渐成为主流。本文档概述了SRT协议的使用,包括通过OBS Studio和SRT Streamer进行SRT直播推流的方法,并展示了推流与拉流的成功实例。更多细节参见《FFmpeg开发实战》一书。
1248 1
FFmpeg开发笔记(四十六)利用SRT协议构建手机APP的直播Demo
FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放
《FFmpeg开发实战》一书中,第10章示例程序playaudio.c原本仅支持mp3和aac音频播放。为支持ogg、amr、wma等非固定帧率音频,需进行三处修改:1)当frame_size为0时,将输出采样数量设为512;2)遍历音频帧时,计算实际采样位数以确定播放数据大小;3)在SDL音频回调函数中,确保每次发送len字节数据。改进后的代码在chapter10/playaudio2.c,可编译运行播放ring.ogg测试,成功则显示日志并播放铃声。
458 1
FFmpeg开发笔记(十八)FFmpeg兼容各种音频格式的播放
|
机器学习/深度学习 数据采集 监控
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient
**神经网络与AI学习概览** - 探讨神经网络设计,包括MLP、RNN、CNN,激活函数如ReLU,以及隐藏层设计,强调网络结构与任务匹配。 - 参数初始化与优化涉及Xavier/He初始化,权重和偏置初始化,优化算法如SGD、Adam,针对不同场景选择。 - 学习率调整与正则化,如动态学习率、L1/L2正则化、早停法和Dropout,以改善训练和泛化。
441 0
算法金 | DL 骚操作扫盲,神经网络设计与选择、参数初始化与优化、学习率调整与正则化、Loss Function、Bad Gradient