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

原创 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.

相关文章推荐

网易云音乐评论抓取及生成词云

在csdn首页上偶然看到了这个话题,然而那篇文章并没有分词,而且只有首页的评论,找了相关的资料,都不能直接运行。# -*- coding: utf-8 -*- """ Created on Tue M...

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

非原创作品,转载自:http://blog.csdn.net/marksinoberg/article/details/70809830 前言 网易云音乐一直是我向...

Python模块探秘之smtplib,实现纯文本邮件的发送

今天学到了如何使用Python的smtplib库发送邮件,中间也是遇到了各种各样的错误和困难,还好都一一的解决了。下面来谈一谈我的这段经历。配置你的邮箱为什么要配置邮箱呢?具体要配置什么呢?因为我们申...

Python模块探秘之EasyGui

在Windows想用Python开发一些简单的界面,所以找到了很容易上手的EasyGui库。下面就分享一下简单的使用吧。参考的链接:官网Tutorial 接下来,我将从简单,到复杂一点点的演示如何使...

Python 获取 网易云音乐热门评论(python2/python3代码)

Python 获取 网易云音乐热门评论(python2/python3代码)

爬取网易云音乐评论

  • 2017年08月27日 15:27
  • 8KB
  • 下载

Jsonp调用网易云音乐API搜索播放歌曲

Jsonp调用网易云音乐API搜索播放歌曲 效果如下图: 基本就是正常的文件播放,暂停,停止,设置循环,随机播放,加速,减速,上一曲,下一曲,再多个选择本地文件加入到播放列表的功能。 然后想...

高仿网易云音乐---之扫描本地歌曲

最近看到网易云音乐的UI还是挺漂亮的,功能也实用,整体效果还是挺fashion的,于是想花点业余时间高仿一下!虽然目前只完成部分模块,一有时间就会进行补充添加! git地址:https://gith...

网易云音乐个人收藏歌曲备注

写在前面 今天是自己第一次开通博客写文章。自己现在大四了,课程和学习轻松了很多,自己也就懈怠了,于是就想尝试做一些有意义的事情,写博客就是很好的选择,不管是生活中的琐事、自己的感悟和思考,还是学习中问...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抓取网易云音乐歌曲热门评论生成词云
举报原因:
原因补充:

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