B站视频爬取
F12 分析视频地址的request请求
音频文件的名字中带有 30280. 视频文件的名字中带有 30074.
音频与视频的文件爬取做法类似,一下以音频为例。
- 先从respond的回应中分析数据:
- Content-Length: 920 表示当前音频长度位920
- Content-Range: bytes 0-919/8033565 表示此视频时从0-919byte的数据,整个音频长 8033565byte
- 在从request中分析如何构造请求可以去得到完整的音频
从上图中可看到一个关键的信息:Range bytes=0-919
联系到respond的信息,于是我们知道了如果要对完整音频或是视频的文件进行请求下载,必须先取得完整文件的大小,然后对request中的range参数写成 bytes=0-[文件大小] 于是就可以得到音频或是视频的完整的文件。
例:用postman构造请求:
即可得到音频文件
我们不可能让普通用户从f12中去获取音频/视频的真实url,所以我们只能对网页进行解析找到视频/音频的url以及参数。
2020/1/3 参考了一些博主写的内容
https://blog.csdn.net/ucsheep/article/details/102529604
1.先从如下格式发起请求 av***** 根据番号替换
请求命令之后返回html,在64行位置有
黄色荧光部分,即得到该视频的真实url地址。
然后再构造对视频的request
Header:
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
Origin: https://www.bilibili.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
Accept: */*
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Referer: https://www.bilibili.com/video/av79983573
Accept-Encoding: identity
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Range: bytes=0-1691202
即可得到视频,(Header中的Range:bytes=0-{视频最大字节长度},测试视频太长,只设置到了1691202字节,即截取了3分钟左右)
但是有问题!
用其他视频测试发现了现在不知道哪里出了问题。
例如发起请求:https://m.bilibili.com/video/av37576684.html?from=search
在60行的位置,找到可视频url的地址:
然后进行构造request,获得视频:
Header:
accept: */*
accept-encoding: identity
accept-language: zh-CN,zh;q=0.9,en;q=0.8
cache-control: no-cache
origin: https://www.bilibili.com
pragma: no-cache
range: bytes=0-1400548
referer: https://www.bilibili.com/video/av37576684?from=search&seid=8862775960448215557
sec-fetch-mode: cors
sec-fetch-site: cross-site
user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36
接下来就出了问题;
返回的是一大串乱码!
然后在想是否是url地址不对??我直接从f12调试中找30080的m4s文件:
对比发现地址没有错!Header直接用f12调试中的,也没有用!!
查看视频m4s 的返回中发现有存在数据!!
我又试了另一个视频:
https://m.bilibili.com/video/av81033483.html?from=search
也出现了同样的问题!!!
但是从f12调试中找到视频m4s文件却与上图中找到地址不同!!
而后者地址可以爬取到整个视频!
两个地址不同在与
http://upos-sz-mirrorkodo.bilivideo.com/upgcxcode/66/19/66051966/66051966-1-30080.m4s?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfqXBvEqxTEto8BTrNvN0GvT90W5JZMkX_YN0MvXg8gNEV4NC8xNEV4N03eN0B5tZlqNxTEto8BTrNvNeZVuJ10Kj_g2UB02J0mN0B5tZlqNCNEto8BTrNvNC7MTX502C8f2jmMQJ6mqF2fka1mqx6gqj0eN0B599M=&uipk=5&nbs=1&deadline=1578058980&gen=playurl&os=kodobv&oi=3740505668&trid=bfaa97b6eab349aeb11f4478d95df55au&platform=pc&upsig=7149657656c4692d5b8ea84b157ed092&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=77651841
https://cn-hbxy-dx-v-01.bilivideo.com/upgcxcode/40/89/138688940/138688940_nb2-1-30080.m4s?expires=1578060000&platform=pc&ssig=HSiQjZQwUmwh4BVjrgipgw&oi=3740505668&trid=e44c2ff59750471cbe06ef5aca7fd551u&nfc=1&nfb=maPYqpoel5MI3qOUX6YpRA==&mid=77651841
主机地址和参数不同
我也不知道问题出在哪里??额,在查查看吧