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

原创 2017年04月26日 17:34:09

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

前言

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

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

抓数据

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

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

抓包分析

使用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即可。
  • 封装起来,提取接口,对外界提供热评服务,或者词云生成服务。
  • … …
版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。转载时请标注http://blog.csdn.net/marksinoberg. 举报

相关文章推荐

Matplotlib调用imshow()函数绘制热图

前面系列文章讲过数据挖掘的各种知识,最近在研究人类时空动力学分析和幂率定律,发现在人类兴趣转移模型中,可以通过热图(斑图)来进行描述的兴趣转移,如下图所示。下一篇文章将简单普及人类动力学相关知识研究。...

【Python数据挖掘课程】三.Kmeans聚类代码实现、作业及优化

这篇文章直接给出上次关于Kmeans聚类的篮球远动员数据分析案例,同时介绍这次作业同学们完成的图例,最后介绍Matplotlib包绘图的优化知识。希望这篇文章对你有所帮助,尤其是刚刚接触数据挖掘以及大...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

【Python数据挖掘课程】四.决策树DTC数据分析及鸢尾数据集分析

今天主要讲述的内容是关于决策树的知识,主要包括以下内容:        1.分类及决策树算法介绍        2.鸢尾花卉数据集介绍        3.决策树实现鸢尾数据集分析&...

ArcGIS desktop——“热力图”实现方法比较

ArcGIS桌面端如何实现动态热力图渲染。

Kmeans聚类算法及其Python实现

Kmeans聚类算法及其 Python实现Kmeans聚类算法及其 Python实现 关于聚类 基本思想 初始质心的选择 算法实验 Python实现 本节内容:本节内容是根据上学期所上的模式识别课程...

【Python数据挖掘课程】二.Kmeans聚类数据分析及Anaconda介绍

这次课程主要讲述一个关于Kmeans聚类的数据分析案例,通过这个案例让同学们简单了解大数据分析的基本流程,以及使用Python实现相关的聚类分析。 主要内容包括: 1....

【python数据挖掘课程】十三.WordCloud词云配置过程及词频分析

这篇文章是学习了老曹的微信直播,感觉WordCloud对我的《Python数据挖掘课程》非常有帮助,作者学习后准备下次上课分享给我的学生,让他们结合词频分析来体会下词云。希望这篇基础文章对你有所帮助,...

Python 绘制热力图

Python绘制热力图reference目标:绘制如下的 hotmap 或者 density-map import matplotlib.pyplot as plt import matplotlib...

sql server中sql语句中单引号怎么转义?

sql server中sql语句中单引号怎么转义? sql server有两个转义符:  ' 默认情况下, '是字符串的边界符, 如果在字符串中包含', 则必须使用两个', 第...
  • sptoor
  • sptoor
  • 2013-09-22 01:49
  • 8671

Django构建一个Blog入门例子

__init__.py # 视为一个python包 models.py   # 编写django数据类,创建数据库等 views.py    # 编写视图函数,从数据中获取数据显示,映射到模板 1.在...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)