Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

Aidan075
• 阅读 1258

本文不涉及剧透!请放心食用

最近又火了一部国产剧:《隐秘的角落》

如果你没看过,那可能会对朋友圈里大家说的“一起去爬山”、“小白船”、“还有机会吗”感到莫名其妙。

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

暑期推荐旅游

小五在这个端午假期也赶紧刷完了本剧,必须要写篇文章了。

由于《隐秘的角落》是在爱奇艺独播,所以数据从爱奇艺下手最直接。

如果没爬过爱奇艺,可以考虑使用豆瓣、微博、知乎(电视剧数据分析 · 万能三件套)的数据。

爬虫

剧很精彩,但追剧界有句俗话说得好:“弹幕往往比剧更精彩”,为了让精彩延续下去,我终究没能忍住对弹幕下手。[1]

爱奇艺的弹幕数据是以 .z 形式的压缩文件存在的,先获取 tvid 列表,再根据 tvid 获取弹幕的压缩文件,最后对其进行解压及存储,大概就是这样一个过程。

这里参考了“数据兔小白[2]的代码,我又修改后实现分集爬取所有弹幕。

def get_data(tv_name,tv_id):  
    url = 'https://cmts.iqiyi.com/bullet/{}/{}/{}_300_{}.z'  
    datas = pd.DataFrame(columns=['uid','contentsId','contents','likeCount'])  
    for i in range(1,20):  
        myUrl = url.format(tv_id[-4:-2],tv_id[-2:],tv_id,i)  
        print(myUrl)  
        res = requests.get(myUrl)  
        if res.status_code == 200:  
            btArr = bytearray(res.content)  
            xml=zlib.decompress(btArr).decode('utf-8')  
            bs = BeautifulSoup(xml,"xml")  
            data = pd.DataFrame(columns=['uid','contentsId','contents','likeCount'])  
            data['uid'] = [i.text for i in bs.findAll('uid')]  
            data['contentsId'] = [i.text for i in bs.findAll('contentId')]  
            data['contents'] = [i.text for i in bs.findAll('content')]  
            data['likeCount'] = [i.text for i in bs.findAll('likeCount')]  
        else:  
            break  
        datas = pd.concat([datas,data],ignore_index = True)  
    datas['tv_name']= str(tv_name)  
    return datas  

注:避免引起不必要的麻烦,本爬虫仅指出关键步骤,不再公开提供。

共爬取得到201865 条《隐秘的角落》弹幕数据。

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

弹幕发射器

按照用户id分组并对弹幕id计数,可以得到每位用户的累计发送弹幕数。

#累计发送弹幕数的用户  
danmu_counts = df.groupby('uid')['contentsId'].count().sort_values(ascending = False).reset_index()  
danmu_counts.columns = ['用户id','累计发送弹幕数']  
danmu_counts.head()  

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

累计发送弹幕数用户top5

第一名竟然发送了2561条弹幕,这只是一部12集的网剧啊。

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

真 · 弹幕发射器

难道他/她是水军?每条都发的差不多?

df_top1 = df[df['uid'] == 1810351987].sort_values(by="likeCount",ascending = False).reset_index()  
df_top1.head(10)  

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?然而并不是,每一条弹幕都是这位观众的有感而发,可能他/她只是在发弹幕的同时顺便看看剧吧。

这位“弹幕发射器”朋友,在每一集的弹幕量又是如何呢?

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

分集&平均弹幕量

是不是通过上图可以侧面说明个别剧集的戏剧冲突更大,更能引发观众吐槽呢?

“弹幕发射器”同志,11、12集请加大输出!

这些弹幕大家都认同

抛开“弹幕发射器”同志,我们继续探究一下分集的弹幕。

看看每一集当中,哪些弹幕大家都很认同(赞)?

df_like = df[df.groupby(['tv_name'])['likeCount'].rank(method="first", ascending=False)==1].reset_index()[['tv_name','contents','likeCount']]  
df_like.columns = ['剧集','弹幕','赞']  
df_like  

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

每一集中点赞最多的弹幕

每一集的最佳弹幕都是当集剧情的浓缩,这些就是观众们票选出来的梗(吐槽)啊!

应该不算剧透吧,不算吧,不算吧Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

实在不行我请你去爬山也可

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

朝阳东升

除了剧本、音乐等,“老戏骨”和“小演员”们的演技也获得了网友的一致好评。

这部剧虽然短短12集,但故事线不仅仅在一两个人身上。每个人都有自己背后的故事,又因为种种巧合串联在一起,引发观众的持续性讨论。

我们统计一下演员们在弹幕中的出现次数,看看剧中的哪些角色大家提及最多。

a = {'张东升':'东升|秦昊|张老师', '朱朝阳':'朝阳', '严良':'严良', '普普':'普普', '朱永平':'朱永平', '周春红':'春红|大娘子', '王瑶':'王瑶', '徐静':'徐静|黄米依', '陈冠声':'王景春|老陈|陈冠声', '叶军':'叶军|皮卡皮卡', '马主任':'主任|老马', '朱晶晶':'晶晶','叶驰敏':'叶驰敏'}  
for key, value in a.items():  
    df[key] = df['contents'].str.contains(value)  
staff_count = pd.Series({key: df.loc[df[key], 'contentsId'].count() for key in a.keys()}).sort_values()  

先计算出现次数,再利用pyecharts制作极坐标图。

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

弹幕中提到的主要演员

比较让我疑惑的三个小孩当中的朱朝阳提及量这么低,按理说应该与其其他两位大体相当啊。

又去源数据看了一遍,提及朱朝阳(朝阳)的弹幕确实很少,因为大部分在弹幕中观众一般就叫他“学霸”、“儿子”之类的了。

词云

总所周知,一篇数分文章不能少了词云。

每篇的词云都尽量跟上篇文章不同,这次我采用的是stylecloud,它算是wordcloud词云包的升级版,看起来美观多了。

import stylecloud  
from IPython.display import Image   

stylecloud.gen_stylecloud(text=' '.join(text1), collocations=False,  
                          font_path=r'‪C:\Windows\Fonts\msyh.ttc',  
                          icon_name='fas fa-play-circle',size=400,  
                          output_name='隐秘的角落-词云.png')  
Image(filename='隐秘的角落-词云.png')  

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

20万条弹幕词云

除了主角的名字以外,在这部以“孩子”为主题的剧中,对孩子的思想、行为的探讨占据重要部分,另外,剧中从年长的戏骨到年幼的孩子,每一个人都贡献了高光的演技,对他们演技的称赞也成为高频词汇。

而最出圈的“爬山”梗,更是被频频提及。

Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山?

一起爬山吗?

从《无证之罪》到《隐秘的角落》,都在证明悬疑犯罪题材在当下并非没有市场,要收获高人气高口碑,如何传播与营销终归只是手段,越来越多的团队沉下心来打磨精品剧集,观众才会愿意为剧买单,让“爬山”这样的梗一步步“出圈”。

本文相关数据和可视化源码下载:

https://alltodata.cowtransfer.com/s/5b483c08987243

参考文章

[1]

小z,数据不吹牛: 《Python 爬取 394452 条《都挺好》弹幕数据,发现弹幕比剧还精彩?》

[2]

数据兔小白: 爬取爱奇艺弹幕后,我找到了共鸣

![](https://img-hello-world.oss-cn-beijing.aliyuncs.com/698a9a84bed3b092

本文转转自微信公众号凹凸数据原创https://mp.weixin.qq.com/s/-ojsJwUgFYK_xj2gU5fKsw,可扫描二维码进行关注: Python爬取 201865 条《隐秘的角落》弹幕,发现看剧不如爬山? 如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
3年前
手把手教你使用Python打造一个爱奇艺热播好剧提前搜系统
/前言/今年的疫情让我们很多人对于打工望而却步,没办法,钱可以再挣,但是生命只有一次,于是,宅在家的我们无事可做,只好看看电影来打发下我们无聊的时间。/项目目标/    通过选择爱奇艺电影选项,我们可以将优质的电影信息打印到文本框供自己查看,然后自己去观看。/依赖工具/    开发工具sublimetext3,360浏览器。/实现步骤/
仲远 仲远
1年前
Downie 4 for Mac(最好用的视频下载软件) 4.6.13直装版
支持国内的优酷、腾讯视频、bilibili、土豆、爱奇艺、网易、搜狐、微博以及国外的Youtube等在线视频网站视频下载,功能强大使用简单。
Wesley13 Wesley13
3年前
SRC组活动战绩及团队各组纳新公告
TimelineSecSRC组,刚刚成立不久,目前呈现高速发展态势。组内师傅实力强劲,在负责人曹宝家大牛的带领下,以团队形式积极参与各大SRC活动,此前参加爱奇艺SRC与中通SRC活动,均取的不错的成绩。在爱奇艺SRC活动中,月榜前十,几乎被团队成员俱占。且因此取的当月优秀团队称号,既是师傅们实力的体现,也是团队凝聚力的体现。在此也感谢hua
Stella981 Stella981
3年前
Apache Dubbo的爱奇艺之旅
ApacheDubbo 简单介绍ApacheDubbo是一款开源的RPC(RemoteProcedureCall,远程过程调用)框架,其提供了简单易用、高性能的RPC能力、灵活可控的扩展、强大的服务治理、完善的开源生态支持,目前已有Java、Go、JS、Python等多个语言支持。ApacheDubbo更
Easter79 Easter79
3年前
TensorFlow Serving 模型更新毛刺的完全优化实践
_前言_在点击率CTR(ClickThroughRate)预估算法的推荐场景中使用TensorflowServing热更新较大模型时会出现短暂的延时毛刺,导致业务侧超时,降低算法效果,为了解决这个问题,爱奇艺深度学习平台团队经过多个阶段的优化实践,最后对TFServing和Tensorflow的源码进行深入优
Wesley13 Wesley13
3年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Easter79 Easter79
3年前
TiDB 在爱奇艺的应用及实践
爱奇艺,中国高品质视频娱乐服务提供者,2010年4月22日正式上线,推崇品质、青春、时尚的品牌内涵如今已深入人心,网罗了全球广大的年轻用户群体,积极推动产品、技术、内容、营销等全方位创新。企业愿景为做一家以科技创新为驱动的伟大娱乐公司。我们在前沿技术领域也保持一定的关注度。随着公司业务的快速发展,原来普遍使用的MySQL集群遇到了很多瓶颈,
Easter79 Easter79
3年前
TaskManager 支持依赖关系的开源android 任务调度库
爱奇艺开源了一个支持任务依赖关系的任务调度工具库,TaskManager.API灵活方便。Github地址:https://github.com/iqiyi/TaskManager1.简单的任务提交TM.postAsync(Runnable);//runonbackgroundthreadTM.