用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?

Aidan075
• 阅读 1378

尽管抄袭傍身,也没能阻挡《爱情公寓5》进击的脚步。

最近爱情公寓电视剧微博发布了长达8分钟的揭幕视频,官宣新季将在2020正式开播。

几位主演纷纷转发宣传,将#爱情公寓5揭幕#的话题送上了热搜。

观众在经历过一次《爱情公墓》的诈骗后,能否接受《爱情公寓5》(下文简称爱5)?

让我们来分析一下。

获取数据

首先,我选取了在B站上最热的视频,目前已经179万播放量,2万弹幕。

用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?

为什么选择B站呢?

著名UP主“残狼之卑”,曾经在b站上传了几十个对比视频,做成《爱情公寓的抄袭史》,每期视频播放量都几十万,所以按理来说B站的用户反对爱情公寓的人应该很多。

如果B站的用户都可以接受,那么《爱5》可能真的会取得不错的播放量。

B站的弹幕数据是有接口的,比如说:

https://comment.bilibili.com/\*\*\*\*\*\*\*\*.xml

它以一个固定的url地址+视频的cid+.xml组成。只要找到你想要的视频cid,替换这个url就可以爬取所有弹幕了。

以刚才的视频为例

用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?

它的cid就是123519261,构成url就是:

https://comment.bilibili.com/123519261.xml

下载并打开这个XML格式的弹幕文件。

用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?

观察上图,所有的弹幕都放在了标签下

那么我们写段爬虫:

from bs4 import BeautifulSoup  
import pandas as pd  
import requests  

url = 'http://comment.bilibili.com/123519261.xml'  
html = requests.get(url)  
html.encoding='utf8'  

soup = BeautifulSoup(html.text, 'lxml')  
results = soup.find_all('d')  

comments = [comment.text for comment in results]  
comments_dict = {'comments': comments}  

df = pd.DataFrame(comments_dict)  
df.to_csv('bili_ai5.csv', encoding='utf-8-sig')

最后成功获取1000条弹幕数据。

(b站给出的字幕限制是1000条)

用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?

数据分析

用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?

在弹幕中看到很多人提及“大二了”,“从小学5年级开始看”,我们来看一下学生阶段在弹幕中的提及数。

#学生阶段在弹幕中的提及数  
a = {'小学':'小学|一年级|二年级|三年级|四年级|五年级|六年级',   
     '初中':'初中|初一|初二|初三',   
     '高一':'高一',   
     '高二':'高二',  
     '高三':'高三',   
     '大一':'大一',   
     '大二':'大二',   
     '大三':'大三',   
     '大四':'大四',}  
for key, value in a.items():  
    data[key] = data['comments'].str.contains(value)  
staff_count = pd.Series({key: data.loc[data[key], 'comments'].count() for key in a.keys()}).sort_values()  
print(staff_count)  

用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?

1000条弹幕就包含了这么多关于年龄的怀念。

数据可视化

我们将爬取得到的弹幕做个词云,更加直观地展示。

import jieba  
from collections import Counter  
from pyecharts import WordCloud  

stop_words = [x.strip() for x in open ('stopwords.txt',encoding="utf-8") ]  
text = ''.join(data['comments'])  
words = list(jieba.cut(text))  
ex_sw_words = []  
for word in words:  
    if len(word)>1 and (word not in stop_words):  
        ex_sw_words.append(word)  
c = Counter()  
c = Counter(ex_sw_words)  
wc_data = pd.DataFrame({'word':list(c.keys()), 'counts':list(c.values())}).sort_values(by='counts', ascending=False).head(100)  
wordcloud = WordCloud(width=1300, height=620)  
wordcloud.add("", wc_data['word'], wc_data['counts'], word_size_range=[15, 80])  

用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?

词云图上,可以看到《爱情公寓》依旧是一代人快乐的回忆,即便是电影导致IP口碑全面崩盘,但粉丝好感似乎用之不尽。即便有人提到抄袭借鉴之类的,也会被说“黑粉gun开”。

通过这次B站弹幕的爬取分析,我现在可以肯定的是《爱5》依然会有很多人看。只要片方挥舞着“十年怀旧,挥别青春”的大旗便会无往不利,这也是他们的底气所在。

其实我理解大家只是想要一个结局。

但《爱5》过后。

没有演技的演员重新找路。

靠着怀旧的片方盆丰钵满。

这是我们想要的结局吗?

朱小五,某互联网公司数据分析师,热衷于爬虫,数据分析,可视化,个人公众号《凹凸玩数据》

本文相关代码已上传github:

https://github.com/zpw1995/aotodata/tree/master/bilibili\_danmu


本文转转自微信公众号凹凸数据原创https://mp.weixin.qq.com/s/2XcJHhsIMLPyKvlqIYxeVg,可扫描二维码进行关注: 用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗? 如有侵权,请联系删除。

点赞
收藏
评论区
推荐文章
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
Easter79 Easter79
3年前
vue+element 表格formatter数据格式化并且插入html标签
前言   vue中element框架,其中表格组件,我既要行内数据格式化,又要插入html标签一贯思维,二者不可兼得也一、element表格数据格式化  !(https://oscimg.oschina.net/oscnet/3c43a1cb3cbdeb5b5ad58acb45a42612b00.p
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Aidan075 Aidan075
3年前
用Python爬取b站弹幕,看大家还会接受《爱情公寓5》吗?
尽管抄袭傍身,也没能阻挡《爱情公寓5》进击的脚步。最近爱情公寓电视剧微博发布了长达8分钟的揭幕视频,官宣新季将在2020正式开播。几位主演纷纷转发宣传,将爱情公寓5揭幕的话题送上了热搜。观众在经历过一次《爱情公墓》的诈骗后,能否接受《爱情公寓5》(下文简称爱5)?让我们来分析一下。获取数据首先,我选取了在B站上最热的视频,目前已经17
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Wesley13 Wesley13
3年前
4cast
4castpackageloadcsv.KumarAwanish发布:2020122117:43:04.501348作者:KumarAwanish作者邮箱:awanish00@gmail.com首页:
Stella981 Stella981
3年前
Docker 部署SpringBoot项目不香吗?
  公众号改版后文章乱序推荐,希望你可以点击上方“Java进阶架构师”,点击右上角,将我们设为★“星标”!这样才不会错过每日进阶架构文章呀。  !(http://dingyue.ws.126.net/2020/0920/b00fbfc7j00qgy5xy002kd200qo00hsg00it00cj.jpg)  2
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
11个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这