扩展阅读:
【还有该网址内容存在未知风险这种操作的么 -_-||】
研究B站已失效的视频
目录
1. 前言说明
2. 获取和研究网页源代码
3. 获取和研究 JSON 文件
4. 其他途径的尝试
5. 心得总结
一、前言说明
↶
- 前言部分:
最近打开自己的收藏夹,发现部分视频已经变成了已失效状态,o(╥﹏╥)o 。
但是,就算不给播放视频,至少把视频的标题放上去,连失效的视频是什么都没办法了解。最近几天的收藏还记得住,可是时间一长就完全不知道自己收藏的已失效视频是什么,多惨哪。所以,想用自己仅有一些掌握的能力看看能不能找到一些有用的信息。【PS.重要的视频还是预先缓存着。因为自己比较佛系,失效的视频对我不会产生太大的波澜。】 - 说明部分:
部分测试的需要(友情参与)
UP 主:oeasy
UID:2884629
【PS.sdl awsl】
二、获取和研究网页源代码
↶
- 先来到个人空间的收藏夹位置
- F12,并 F5 刷新页面
这里,我们已经获取到了所需的 HTML 源代码,接下来尝试寻找所需要的信息。 - 查找到下面这样的情况
上图中的data-aid
就是视频的 av 号 - 随便找一个 aid 号,将它的结点全点开
从 HTML 源代码中,就写着不少的信息。但是这是未失效的视频,并没有达到初衷,对我们来说没有用。因此,尝试查找已失效视频的相关源代码。 - 查找一个已失效视频的部分 HTML的源代码,并将它的结点全点开
通过源代码的对比,不难看出,这是就是一个失效的视频。
这个视频的封面的链接,也变成了已失效的封面。
现在从上面那段失效视频的 HTML 源代码中,我们勉强只能整理出一下信息:
项 | 值 |
---|---|
aid/av 号 | 54875782 |
视频时长 | 09: 01 |
播放数 | 89.1 万 |
收藏数 | 11.2万 |
UP主 | Powersee |
投稿日期 | 6-8 |
视频状态 | 已失效 |
收藏日期 | 6-11 |
但是,最重要的是,视频标题是什么,不知道标题,还是不清楚我收藏了什么。通过 UP 主的动态了解也是一种办法,但是不精准。由此可见,HTML 源代码已经没办法查到更多的信息,只好尝试别的方法。
三、获取和研究 JSON 文件
↶
- F12,选择 Network,并 F5 刷新,进行浏览器的抓包
- 尝试查找与收藏部分有关的内容
可以看出,这个请求链接返回的数据文件好像有我们想要的数据,并且更加内容详细。 - 如何轻松获取请求链接,并获得数据呢?
观察上述图片中的链接:https://api.bilibili.com/medialist/gateway/base/spaceDetail?media_id=64363929&pn=1&ps=20&keyword=&order=mtime&type=0&tid=0&jsonp=jsonp
里面有个 media_id ,并不知道从哪里出来的,但是如果知道 media_id 号,就可以返回想要的数据。
首先猜测是否与 uid 有关【猜测的理由是:uid 号可以唯一指定B站用户,而收藏夹是每个人独一无二的。不管怎么样,都无法避免使用 uid 号来区分互联网上的客户,通过 uid 号 B站的服务器才能准确地返回相应用户的数据】
uid 号目前是 2884629,而 media_id 是 64363929,两者并不一致。
因而,查找两者是否有联系,继续抓包测试。
经过测试可以抓到以下的内容,下面的链接请求后,可以返回收藏夹的一些信息,里面就有需要的 media_id 号
再观察一下请求的链接:https://api.bilibili.com/medialist/gateway/base/created?pn=1&ps=100&up_mid=2884629&is_space=0&jsonp=jsonp
链接中的 up_mid 参数,就是每个用户的 uid 号。
通过用户 uid 拼接上面的链接,就可以访问到指定 uid 用户的收藏夹的相关信息,再用其中返回的 media_id 号,对收藏夹具体信息的链接拼接,就能返回指定的收藏夹中视频具体的信息。 - 接下来要对返回的数据文件,进一步地分析来尝试获取有用的信息,先研究一个未失效视频的数据
从返回的数据结构来看,属于 JSON 数据。
将返回的数据格式化【JSON 格式化】,并从中截取一个未失效视频的相关数据:
{
'attr': 0,
'cnt_info': {
'coin': 86456, # 硬币数
'collect': 227945, # 收藏数
'danmaku': 3227, # 总弹幕数
'play': 1085684, # 播放数
'reply': 2825, # 回复量(评论量)
'share':