今年夏天各电视和视频平台同步播出了许多音乐综艺节目,包括热度较高的《乐队的夏天》、《明日之子》、《声入人心》、《我是唱作人》、《中国新说唱》、《中国好声音》等。
以下是这几档节目来自豆瓣的评分,乐队的夏天以唯一8分以上的高分位居第一,我是唱作人 7.6,明日之子6.5,声入人心6.1,中国好声音5.3,中国新说唱5.2分。
小笨聪偶然听到几个女孩在谈论《明日之子》这档节目,比较好奇,就想着爬取一下《明日之子》的评论和弹幕,看看大家都在说什么东东。
腾讯视频为《明日之子》的播放平台,我们知道爬取视频类评论及弹幕数据一般有固定的格式,最重要的是获取视频 videoID 以及存放评论或弹幕的文档,以便找到它们对应的编号。
在谷歌浏览器下打开视频播放地址,向下滑动几页加载评论,使用开发者工具(F12)在源代码中即可看到 commentid,这里需要使用抓包工具。原理为找到并复制 url 地址,并一直循环到下一个存放评论的 id,这样就可以获取评论。
Headers 是查看自己浏览器中的 cookies,弹幕在腾讯视频中存放在多个叫 danmu 的 js 中,还需要使用到时间间隔,大概同上评论获取的方法。
1 # -*- coding: utf-8 -*-
2 import urllib.request
3 import re
4 import urllib.error
5 import sys
6 non_bmp_map = dict.fromkeys(range(0x10000, sys.maxunicode + 1), 0xfffd)
7 headers=("User-Agent","Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36")
8 openr = urllib.request.build_opener()
9 openr.addheaders = [headers]
10 urllib.request.install_opener(openr)
11 commentid= '6555778066593331820'
12 url = "https://video.coral.qq.com/varticle/4005898499/comment/v2?
callback=_varticle4005898499commentv2&orinum=10&oriorder=o&pageflag=1&cursor="+
commentid+"&scorecursor=0&orirepnum=2&reporder=o&reppageflag
=1&source=132&_=&_=1564890413257"
13 for i in range(0, 100):
14 data = urllib.request.urlopen(url).read().decode()
15 patnext = '"last":"(.*?)"'
16 nextid = re.compile(patnext).findall(data)[0]
17 # print(nextid)
18 patcom = '"content":"(.*?)",'
19 comdata = re.compile(patcom).findall(data)
20 for j in range(0, len(comdata)):
21 print("---第"+str(j)+"条评论内容是:")
22 print(eval('u"'+comdata[j]+'"').translate(non_bmp_map))
23 url = "http://video.coral.qq.com/filmreviewr/c/upcomment/0dfpyvfa7tp0ewe?commentid="
+ nextid + "&reqnum=3&callback=jQuery1124028619190818429263_1528385498744&_
=1528385498747"
24 # print(url)
本文获取了《明日之子》第1-10期以及先导片的评论及弹幕共10w 多条,下面将对这些文字展开各方面分析(数据分析代码见文末)。
大多数人在发表看法时都会带自己喜欢支持的明星或选手名字,这也给出了一个很好的分析点,在分析出的词频TOP排序中筛选出排列前16的人名,其中包括了导师及选手。当然大家在讨论明星或选手涉及到一些别名,以下都是将这些名字归整后的数据,如华晨宇有花花、大哥,张钰琪有船长、大侠等别名。
其他还有一些出现错别字的情况也进行了合并。出现频率越高的人名其拥有的别称也越多,还有几个人都被称作大哥,如花大哥、山支大哥、苏大哥等。
上图可见华晨宇以8707词频的绝对优势占领讨论热度第一,当然这也与近几年他参加不少节目涨了很多粉丝有关。
而选手中讨论度第一的毫无疑问是5981词频的张钰琪(总决赛最强厂牌),讨论热度选手前4分别为张钰琪、By2、洪一诺、冯希瑶。
在10w 条数据中使用python进行词频统计并输出前200词语,剔除人名后截取前面部分数据,发现每个人口中最频繁出现的词语都是一些非常正面积极的词语。 如喜欢、加油、可爱、好听、支持、实力等。但仍然很少出现与音乐相关的词语,大部分为与选手本身相关的。以下图右上角为词频,粉色区域面积也代表了出现的总频次。
(以上背景图来自明日之子官方造型,与词频分析无关)
将出现词频 TOP200 的词语制作成词云图如下,人名出现概率较高,其他形容的词语都较为积极正向。词云轮廓使用了明日之子水晶时代的图标。
以下筛选出几位讨论度较热的名字,包括6位导师及6位选手,制作专属人名的词云,看看大家围绕他们都在讨论什么。
数据发现,提及 By2 时的词语有舞蹈、优秀、心疼,Veegee 为特别、适合,冯希瑶有支持、好听,洪一诺为风格、打动、复古,苏北北为苏哥、搞笑,张钰琪为支持、超级、期待。
华晨宇为可爱、点评、演唱会,龙丹妮为老板、龙姐、点评,毛不易为矜持、害羞、巨星,孟美岐为山支、啊啊啊、好看,宋丹丹为老师、花花、音乐、搞笑,孙燕姿为唱歌、女神、专业。
但总体各位选手讨论的热词有些没有太大变化,都和总体的讨论热词类似,也没有特别凸显选手的特点。
对所有数据进行情感分析,使用 python 的中文情感分析包 SnowNLP 输出情感值,其中分值在0-1之间,越靠近0表示情感越消极,越靠近1说明情感越积极。
并绘制了如下频率分布直方图。可见观众的情感是压倒性的偏向积极情感,当然也有部分消极情感的意见。
在大致分析了各个演员与每一集的情感之后发现并无太大变化,都偏向积极情感。
以下将情感分值低于0.1的部分评论和弹幕筛选出来做成了词云图,即看那些消极评论都在说什么。
可以看到,有些消极评论在吐槽腾讯视频的问题,有一些则是各家粉丝互怼的部分,还有关于节目对选手的问题被指责。
当然,节目好与坏都存在呼声和骂声,一档节目决定面向大众就意味着,不仅节目还包括里面的选手都面临被斥责的风险,尤其是最近火热的音乐类节目。但还是呼吁大家文明观看,不要以随意吐槽作为乐趣。
以上就是本次爬取《明日之子》评论和弹幕并可视化分析的过程。微信公众号“学编程的金融客”后台回复“明日之子”即可获取源码。【完】
往期推荐
1.爬取流浪地球影评
2.北上广深租房图鉴
3.大学排行榜可视化
4.爬取抖音视频
5.母亲节祝福代码
你的点赞和关注就是对我最大的支持!