利用自动化程序获取B站视频

788 字
4 分钟
利用自动化程序获取B站视频

引文链接:

在上一章的叙述中,我们已经了解了获取B站视频的方式。接下来让我们考虑如何把它变为自动化程序。

warning 提示
这里以Python为例,您也可以改造其他语言的版本。

头绪

现在问题来了,我们的程序不能依赖浏览器解析原视频链接(就算依赖了也难以实现)。当务之急,就是找到源视频链接隐藏在什么地方。

比如说我现在打开这个视频:

然后看到视频URL是https://upos-sz-mirrorks3.bilivideo.com/upgcxcode/87/39/295443987/295443987-1-16.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1616501273&gen=playurlv2&os=ks3bv&oi=1018424233&trid=e4a339385c1742cc935ec43bee36eac1h&platform=html5&upsig=ba6920880404564592895256cded0950&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=504293988&logo=80000000

接着,我们看一看网页源代码:


CTRL+U即刻调出源代码界面

如你所见,你会看到在中间的optionsjson里看到以下几个链接。下面笔者粘贴出来做样例解析。

var options = {
            aid: 331505664,
            bvid: 'BV1yA411u7RR',
            cid: 295443987,
            readyPoster: '//i0.hdslb.com/bfs/archive/efc17d8ae488470712d57e4ad6d84ef07c3c40cd.jpg@480w_270h_1c',
            readyVideoUrl: 'https://upos-sz-mirrorks3.bilivideo.com/upgcxcode/87/39/295443987/295443987-1-16.mp4?e=ig8euxZM2rNcNbdlhoNvNC8BqJIzNbfq9rVEuxTEnE8L5F6VnEsSTx0vkX8fqJeYTj_lta53NCM=&uipk=5&nbs=1&deadline=1616501764&gen=playurlv2&os=ks3bv&oi=1018424233&trid=5c99efb95f0d41988373e18489074183h&platform=html5&upsig=070c72c614ca3411f70365b62c279b96&uparams=e,uipk,nbs,deadline,gen,os,oi,trid,platform&mid=504293988&logo=80000000',
            readyDuration: 184,
            noRecommend: gqs('from') == 'game'
          }

  • bvid:视频号;
  • readyPoster:视频封面图片;
  • readyVideoUrl:源视频链接。

(有些不知道什么含义的没列出,望大佬指教QWQ)

好家伙,这里我们直接获取视频即可。

代码实现

warning 注意
您应该使用移动端的标头(headers)进行GET请求。

这里粘贴出基本代码:

from requests import *
import os
from json import *
def get_and_save(vid,path):
    headers={'user-agent':'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Mobile Safari/537.36'}
    print("getting HTML...",end=' ')
    r=get(url='https://m.bilibili.com/video/'+vid,headers=headers)
    html=r.text
    print("done! parsing...")
    vurl=(html[html.find('readyVideoUrl: ')+18:html.find("readyDuration")-15])
    name=html[html.find('''data-vue-meta="true">''')+21:html.find("")]
    if os.path.exists(path+name+'.mp4')==False:
        print("downloading video...",end=' ')
        resp = get('ht'+vurl,headers=headers)
        print("done!\nsaving video...",end=' ')
        with open(path+name+'.mp4','wb') as f:
            f.write(resp.content)
        print("done!")
    return path+name+'.mp4'

无聊的时候,把B站视频下载下来,弄成音频保存在本地听,怪无聊的(

——该代码从何而来

已经为您包装好了函数,即get_and_save部分的代码,谢谢。(

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
利用自动化程序获取B站视频
https://www.0x3f.foo/posts/利用自动化程序获取b站视频/
作者
Dignite
发布于
2021-03-23
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
Dignite
When nothing goes right, go left.
公告
欢迎来到我的博客!这是一则示例公告。
分类
标签
站点统计
文章
146
分类
5
标签
271
总字数
314,753
运行时长
0
最后活动
0 天前

目录