从《【何同学】我拍了一张600万人的合影...》弹幕分析中,获取到了什么?

这篇博文很早就打算写了,但因为懒一直拖到现在,先交代一下博文选材背景:8月2号,B 站数码 Up 主 老师好我叫何同学 更新了一个视频《【何同学】我拍了一张600万人的合影… 》(离他的上一个视频更新已经一个多月),来纪念频道成立三周年

虽说在何同学提前一天的预告中就猜到这个视频的质量一定不会差,但看完之后,内心只有俩字牛逼!,这个视频真的真的惊艳到我了,赞叹于他视频制作水准,佩服于他对粉丝的用心;在看视频中看到一条弹幕,觉得评价地很中肯:等一个多月看到这个视频、值了!

关于这个视频还是很推荐,截至到8月8日已经在B站已经播放了 880万次,链接我放在下方,有兴趣或者想二刷的小伙伴可以刷一下

而本文将是围绕这个视频的弹幕进行采集,并做简单的分析;在接下来的部分中,文章将分为三个部分展开:

  • 1,数据采集部分;介绍一种采集 B 视频弹幕的方法;

  • 2,数据可视化并分析;根据评论时间分布制成可视化图表,分别以弹幕发布时间、视频各阶段弹幕量占比、弹幕数量时间走势等几个角度做简单分析;

  • 3,弹幕词云可视化:将采集得到的文本制成词云图;

B站弹幕采集

1, 这里先介绍一下 B 站视频弹幕的采集方法,本文用的是 Python 脚本作为抓取工具,首先打开抓取的视频网页,这里以何同学的这个视频为例,找到右边的 弹幕列表

1.png

2,按 F12 打开开发者工具,依次点击弹幕列表、查看历史弹幕、选择日期 ,随后找到 开发者模式中的 history?.. 链接(图中的右边箭头所示,若找不到刷新一下页面,重新按照上面步骤操作一下即可);

2.png

3,2 中的链接就是最终我们需要的链接,仔细观察后会发现这个链接有两个关键参数构成,一个 oid, 一个 date ,oid 表示视频 ID 比较容易查找,date 表示日期,可通过 datetime 来构造;

3.png

4.png

4,构造 3 中的链接之后,用常规的爬取方法(requests + Beautifulsoup) 即可,

5.png

主要代码部分如下:

def get_duration_time(start_date1,end_date,video_id):
    # 日期格式转换
    start_date = datetime.datetime.fromisoformat(start_date1)
    end_date = datetime.datetime.fromisoformat(end_date)
    dateltime = datetime.timedelta(days=1)
    while start_date <= end_date:

        startdate_format =  start_date.strftime("%Y-%m-%d")
        download_date(startdate_format,video_id)
        start_date = start_date +  dateltime



def download_date(timedate,video_id):
    # 传入日期、视频id 进行数据爬取
    shipin_url = 'https://api.bilibili.com/x/v2/dm/history?type=1&oid={0}&date={1}'.format(video_id,timedate)
    print("正在抓取弹幕网页", shipin_url)
    response = requests.get(url = shipin_url,headers = headers)
    response.encoding = 'utf-8'
    soup = BeautifulSoup(response.text,'lxml')
    for i in soup.find_all('d'):
        locate = re.findall(r'p="(.*?)">(.*?)</d>',str(i))
        file.write(str(locate[0][0]))
        file.write(',')
        file.write(str(str(locate[0][-1])))
        file.write("\n")
    time.sleep(2) # 增加时间间隔,防止爬取太频繁;
可视化分析

可视化部分主要用到了 Pyecharts ,数据一共采集到了 7000 条弹幕,时间跨度从 8.2 — 8.8,

1,下面这张图是关于 从8.2— 8.8 弹幕数量总数变化走势图,从图里面得不到什么有效的信息,有一点是弹幕走势呈现一短时间骤升、一段时间平缓状态;

Snipaste_2020-08-08_23-22-26.png

2,接下来对 8.2 -8.8 每天以没30分钟作为一个时间段,汇总每天各时间段弹幕数量分布与变化,最终绘制得到沿时间线走向的动态趋势图;

录制_2020_08_08_23_32_16_808.gif

从动态图中可以看到 视频刚公布没多久弹幕较为集中,且数量最多,随着时间推移,评论愈发分散、数量愈发减少,这个特点可能适用于大部分 头部 Up 主 视频播放特点,播放量从多到少,热度从高到低

3,最后,因为视频《【何同学】我拍了一张600万人的合影…》整个时间长度为 7:56,因此我想观察在采集的数据中那个时间段发布的弹幕数最多,那个时间段发布最少,再结合视频节点内容本身分析一下,于是最终就得到了下面这一张图:

Snipaste_2020-08-08_23-42-32.png

弹幕最多的是在 4分-4分30秒的中间,我截了其中一张图,视频内容部分就是和同学成功把将近600万粉丝的id 刻在A4 纸板子上,贴放在墙上为后面汇至到一个镜头打下基础;以我自己的角度猜测一下,因为这个工作量太大,为何同学的用心而感动;

Snipaste_2020-08-08_23-40-14.png

弹幕最少的实在2分-2分半,这部分内容是在思考 怎样找到一个能贴满 300张 A4纸的墙壁?,内容掺杂着一部分诙谐,粉丝们可能大部分都在思考,也就忘记了发弹幕(自己的一点猜测)。

Snipaste_2020-08-08_23-43-15.png

词云图展示

最后,将 7000 条弹幕制成词云图,做一下可视化预览,这里没有用Python 相关包,用的是 WordArt

Word Art.png

泪目、感动、辛苦了 是粉丝们看完这个视频的感受,足以反映出何同学的用心和真诚,找到了 表示粉丝确实从 600万粉丝的合照中找到了自己的 ID ,可以感受到拍摄这个合照的难度,

最后以 老师好我叫何同学 ID为词云图背景作为文章的结束,关于文章完整源码,公号 【小张Python】后台回复 何同学 即可获取。

Word Art (1).png

好了,以上就是本篇的所有内容,最后感谢大家的阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小张Python1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值