美文网首页
从《【何同学】我拍了一张600万人的合影...》弹幕分析中,获取

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

作者: 小张Python | 来源:发表于2020-08-23 12:50 被阅读0次

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

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

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

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

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

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

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

B站弹幕采集

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

1.png

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">1.png</figcaption>

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

2.png

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">2.png</figcaption>

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

3.png

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">3.png</figcaption>

4.png

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">4.png</figcaption>

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

5.png

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">5.png</figcaption>

主要代码部分如下:

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 +  dateltimedef 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

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">Snipaste_2020-08-08_23-22-26.png</figcaption>

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

录制_2020_08_08_23_32_16_808.gif

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">录制_2020_08_08_23_32_16_808.gif</figcaption>

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

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

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

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">Snipaste_2020-08-08_23-42-32.png</figcaption>

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

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

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">Snipaste_2020-08-08_23-40-14.png</figcaption>

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

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

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">Snipaste_2020-08-08_23-43-15.png</figcaption>

词云图展示

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

Word Art.png

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">Word Art.png</figcaption>

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

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

Word Art (1).png

<figcaption style="margin-top: 5px; text-align: center; color: #888; font-size: 0.0;">Word Art (1).png</figcaption>

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

相关文章

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

    这篇博文很早就打算写了,但因为懒一直拖到现在,先交代一下博文选材背景:8月2号,B 站数码 Up 主 老师好我叫何...

  • 被小破站上一个UP主实力圈粉

    自从昨天在B站刷到知名UP主“何同学”的一个视频——“我拍了一张600万人的合影…”后,我这两天突然就对刷小破站上...

  • 粉丝:君子之交淡如水

    昨天b站何同学做了一件无聊的事,把600万粉丝的ID打印在自己家墙上,拍了一张2000亿像素的合影,在微博上爆火。...

  • 我和王东先生及书法

    偶然翻捡旧时照片,果然找到记忆中与王东同学的一张合影:1985年毕业时,同他在邛崃师范大门外勾肩搭背地拍了张...

  • 放假喽

    上午十一点就下课了。 我给全班同学和老师拍了最后一张合影后,本学期正式宣告结束。 放假了。 很开心! 我快速的穿好...

  • 我俩自拍了一张合影

    我俩自拍了一张合影 2022年9月24日。鲁老师带我去了北普陀影视城,一路上他给我讲了这座影视城的辉煌时期,原来...

  • 拍了证件照

    海马体,人体存储记忆的地方,我们拍了一张美丽的合影。真的很棒。

  • 我们那个时候(下)

    说是不许拍照,但我们还是忍不住想拍照。征得陪同我们的营长同意,我们还是在礼堂门口拍了一张合影,这一张合影就是营长给...

  • 须弥芥子,都是山中苍生(三)

    幻境中我无比强大, 现实中我渺小一叶。 它们与此相遇, 拍了张虚与实的一张合影。 如此精雕细刻, 不过沧海一叶。 ...

  • 去大城市追逐梦想,还是留在小城市享受安逸?

    前不久在朋友圈里看到一个初中同学晒了一张照片,是她和几个同事的合影。点开照片,我发现在合影中还有另一个初中同学的面...

网友评论

      本文标题:从《【何同学】我拍了一张600万人的合影...》弹幕分析中,获取

      本文链接:https://www.haomeiwen.com/subject/eevijktx.html