参考链接
爬取B站视频
目录
1. 前言说明
2. 自动化分析
3. 爬取单个视频
4. 批量爬取视频
5. 总结
一、前言说明
↶
-
前言
每次查找资料和研究总是能够发现一些新鲜事【奈何我懂得太少】。这次因为相关的自动化爬虫的原因,继续研究了一下 B 站的 m4s 文件,果然发现了一些有用的东西。不过,这次博文主要目的是,为了记录整个资料查找和研究的过程,算是一个思考过程吧。【写自动化爬虫不太在行,也没有这个需求,而且工具好像也有一大推 emmmm…】。 -
额外的说明
因为之前已经写过两篇文章,一篇是 爬取B站的flv视频,另一个是 爬取 m4s 的视频。这里就有一个问题,既然 B 站从 flv 改到了 m4s,那么分界点在哪里。因为可能有人会认为 B 站传来的视频全部改为 m4s 短视频流格式,其实不然,事实上大概是以某个时间点为界【当然也可以打我的脸】,两边分隔为 flv 和 m4s 的对立派。
所以,采用二分法,目的是找到分隔点。
av: 30504429,20180827数据分析
av: 30504430,【iKON】「自存」那些有艺术感的video
时间点确定为,2018-08-28
原来,我以为这是一个分隔点,但是后续的 av30504450 又是 flv 文件,所以勉强地认为这个分隔点上下浮动有一定范围,可能是一个衔接的过程。所以,大致在这个视频以前的投稿视频,姑且可以认为是 flv 视频,之后是 m4s 视频。
下面是正文部分
二、自动化分析
↶
测试视频:av66476652
-
依旧打开 F12,重新刷新,并找到指定数据包
既然我们的目标是实现自动化爬取 B 站的视频,那么如何获取 URL 是一个关键,而不是打开网页后抓包之后得到指定数据包后下载视频,这两者还是有区别的。
以下是此数据包的 URL 链接:
https://cn-zjwz3-dx-v-11.acgvideo.com/upgcxcode/80/78/115287880/115287880-1-30080.m4s?expires=1567849800&platform=pc&ssig=Fp1CahgHwsUBCEd45Yo5-Q&oi=2085381866&trid=4d431eaebd8e4536a416728143ba73ebu&nfc=1&nfb=maPYqpoel5MI3qOUX6YpRA==&mid=100938015
-
查看 m4s 文件的 URL 请求时提交的参数
从中,我们最多也只能知道 expire 代表了时间戳,platform 代表 pc 主机,mid 号应该是自己的 UID 号,但是其它的我们都不知道。 -
尝试搜索这些未知数据,找到了一个有用的数据包
-
格式化 Json 数据,并进一步分析这个数据包
好像里面就有我们需要的 m4s 的链接,假如解决了 Json 数据包 URL 的获取问题,那么这个问题不就解决了么。
{
"code": 0,
"message": "0",
"ttl": 1,
"data": {
"from": "local",
"result": "suee",
"message": "",
"quality": 80,
"format": "flv",
"timelength": 229291,
"accept_format": "hdflv2,flv,flv720,flv480,flv360",
"accept_description": ["高清 1080P+", "高清 1080P", "高清 720P", "清晰 480P", "流畅 360P"],
"accept_quality": [112, 80, 64, 32, 16],
"video_codecid": 7,
"seek_param": "start",
"seek_type": "offset",
"dash": {
"duration": 230,
"minBufferTime": 1.5,
"min_buffer_time": 1.5,
"video": [{
"id": 80,
"baseUrl": "http://cn-zjwz3-dx-v-11.acgvideo.com/upgcxcode/80/78/115287880/115287880-1-30080.m4s?expires=1567850700\u0026platform=pc\u0026ssig=S3R6tNYzukQZ6D4M3w-k8g\u0026oi=2085381866\u0026trid=8e7b80f4881c4966af032947f69736ceu\u0026nfc=1\u0026nfb=maPYqpoel5MI3qOUX6YpRA==\u0026mid=100938015",
"base_url": "http://cn-zjwz3-dx-v-11.acgvideo.com/upgcxcode/80/78/115287880/115287880-1-30080.m4s?expires=1567850700\u0026platform=pc\u0026ssig=S3R6tNYzukQZ6D4M3w-k8g\u0026oi=2085381866\u0026trid=8e7b80f4881c4966af032947f69736ceu\u0026nfc=1\u0026nfb=maPYqpoel5MI3qOUX6YpRA==\u0026mid=100938015",
"backupUrl": null,
"backup_url": null,
"bandwidth": 1447135,
"mimeType": "video/mp4",
"mime_type": "video/mp4",
"codecs": "avc1.640028",
"width": 1920,
"height": 1080,
"frameRate": "16000/672",
"frame_rate": "16000/672",
"sar": "1:1",
"startWithSap": 1,
"start_with_sap": 1,
"SegmentBase": {
"Initialization": "0-975",
"indexRange": "976-1559"
},
"segment_base": {
"initialization": "0-975",
"index_range": "976-1559"
},
"codecid": 7
}, {
"id": 64,
"baseUrl": "http://cn-zjwz3-dx-v-01.acgvideo.com/upgcxcode/80/78/115287880/115287880-1-30064.m4s?expires=1567850700\u0026platform=pc\u0026ssig=DCgoPxhgaq52RqUXD07bcw\u0026oi=2085381866\u0026trid=8e7b80f4881c4966af032947f69736ceu\u0026nfc=1\u0026nfb=maPYqpoel5MI3qOUX6YpRA==\u0026mid=100938015",
"base_url": "http://cn-zjwz3-dx-v-01.acgvideo.com/upgcxcode/80/78/115287880/115287880-1-30064.m4s?expires=1567850700\u0026platform=pc\u0026ssig=DCgoPxhgaq52RqUXD07bcw\u0026oi=2085381866\u0026trid=8e7b80f4881c4966af032947f69736ceu\u0026nfc=1\u0026nfb=maPYqpoel5MI3qOUX6YpRA==\u0026mid=1