统计b站多p视频正在观看人数和弹幕的变化,制作折线图

心血来潮的原因:最近在B站看java的学习视频,每次看到下面的正在观看人数就想知道该参数在多p中是如何分布的。是不是越到后面观看的人就越少?
目的:统计b站多p视频正在观看人数的变化,制作折线图

实例:https://www.bilibili.com/video/BV1uJ411k7wy
p1:https://www.bilibili.com/video/BV1uJ411k7wy?p=1
p2:https://www.bilibili.com/video/BV1uJ411k7wy?p=2

  • 问题1:获取总共有多少p?

这是静态内容,很容易获取。

如图有999p。

  • 问题2:获取该p正在有多少人看?

问题2.1:此span是动态生成的数字,静态页面爬取不到。所以放弃获取源页面的方法
问题2.2:如何通过浏览器(F12)找到动态资源对应的json或者xml资源?
思路
1.根据“正在观看人数”字符串提炼出可能的英文关键词:online。
2.在浏览器按F12,点击搜索按钮搜索关键词online,找到包含观看人数的条目,从而获取到了对应的url网址,如下:
p1:https://api.bilibili.com/x/player.so?id=cid%3A135754356&aid=79312032&buvid=3136BC34-1B73-4D1B-8162-4BCF0017E17353927infoc
p2:https://api.bilibili.com/x/player.so?id=cid%3A135754279&aid=79312032&buvid=3136BC34-1B73-4D1B-8162-4BCF0017E17353927infoc
在浏览器直接输入上述网址是获取不到的,在爬虫程序编写中,在请求头加入对应的referer头就可以获取了。如下:
<has_next>1</has_next>
<online_count>45</online_count>
<dm_mask></dm_mask>
<mask_new></mask_new>
观察可知,多p视频唯一的变量是视频的cid号,所以转而获取视频的cid号
问题2.3 获取视频的cid号
通过逐个点击各种请求,观察response得到了下面的网址
重要json获取cid:https://api.bilibili.com/x/player/pagelist?bvid=BV1uJ411k7wy&jsonp=jsonp
该网址可以一次性获取多p视频所有的cid号

至此所有问题都已解决。
授人以鱼不如授人以渔,代码就不贴了,思路才是最重要的。

下面是某视频正在观看人数的折线图:
在这里插入图片描述

当然视频的弹幕数量也有观察各位的学习情况的功能
问题3:获取该p有多少条弹幕?
问题3.1:很不幸,该元素也是动态元素。
问题3.2:通过浏览器(F12)找到动态资源对应的json或者xml资源
很不幸通过自己查找很难找到弹幕的接口,大家只要记住弹幕的接口api网址就行,如下:
“https://api.bilibili.com/x/v1/dm/list.so?oid=” + cid
下面是某视频弹幕的折线图:

由上面两个图片可见,很多人学习都是半途而废,不禁让我为之扼腕叹息。


版权声明:本文为weixin_44727250原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。