最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

『B站API學(xué)習(xí)』不使用插件下載B站視頻

2020-06-14 05:26 作者:ZHY2020  | 我要投稿

聲明:僅作技術(shù)交流,嚴(yán)禁用于盜視頻

前言

前幾天,發(fā)了個(gè)演示不用插件只用瀏覽器和aria2c下載器下載視頻的視頻。

發(fā)這個(gè)純粹是裝個(gè)B,之所以標(biāo)題里寫(xiě)著不包會(huì),是因?yàn)槲易约褐肋@個(gè)方法是有bug的。關(guān)鍵是https://api.bilibili.com/x/player/playurl這個(gè)接口的可被條抓取件。

但是它是可以輸入地址調(diào)用,大會(huì)員不是必須條件,不登錄帳號(hào)也是可以。

在瀏覽器的地址欄直接輸入:

不換行(專(zhuān)欄系統(tǒng)會(huì)莫名其妙加分號(hào),所以圖片)

也可以獲取到視頻的下載鏈接信息。

“?”后面是請(qǐng)求的各種參數(shù),并以“&”分割,下面來(lái)解釋下如何手動(dòng)構(gòu)造這個(gè)請(qǐng)求URL。

下載視頻分幾步?

在我看來(lái)這個(gè)過(guò)程有以下的步驟:(已知BV號(hào)或av的情況下)

  1. 通過(guò)BV號(hào)或者av號(hào)獲取稿件的P數(shù),以及每P視頻的cid

  2. 通過(guò)BV號(hào)或者av號(hào)加上畫(huà)質(zhì)參數(shù)(qn)來(lái)組合playurl接口的參數(shù),來(lái)獲取視頻的下載地址。

  3. 將下載地址導(dǎo)入下載器,添加referer請(qǐng)求標(biāo)頭,下載。

CID是個(gè)啥?咋獲取?

av號(hào)和bv號(hào)我們都很熟悉,但它們是稿件的唯一編號(hào)。

一個(gè)視頻稿件可能不會(huì)只有一個(gè)視頻(多P),你只告訴服務(wù)器av號(hào)或bv號(hào),服務(wù)器其實(shí)并不知道你要獲取哪個(gè)視頻。于是就需要另一種編號(hào)來(lái)指定視頻,這就是cid。

cid不會(huì)在正常訪問(wèn)時(shí)查看到,于是也需要調(diào)用特定接口來(lái)獲取。

https://api.bilibili.com/x/web-interface/view

這個(gè)接口使用很簡(jiǎn)單,只有一個(gè)參數(shù):aid(av號(hào))或bvid(BV號(hào))二選一。

范例(bv號(hào)要包含BV)

其返回的json數(shù)據(jù)(使用開(kāi)發(fā)者模式查看)

示例

從中你可以看到該稿件的很多信息:BV號(hào)av號(hào)(可以用作兩者在線互轉(zhuǎn))、UP主、封面圖……

pages中存有稿件每一個(gè)P的信息,cid就保存在這里,擇其一。

構(gòu)建playurl接口請(qǐng)求

好了現(xiàn)在就有了能夠指定視頻的兩個(gè)最重要的參數(shù)了

這個(gè)時(shí)候你可以直接在接口地址后跟上兩個(gè)參數(shù)。

這里av號(hào)對(duì)應(yīng)avid,bv號(hào)對(duì)應(yīng)bvid

返回?cái)?shù)據(jù):

durl-url里的鏈接就是視頻下載鏈接了,這里由于其他參數(shù)缺省,獲取到的是flv封裝的720p視頻地址,包含音視頻。

如果要其他畫(huà)質(zhì)呢?那就是qn參數(shù)所確定的事了。

加上qn參數(shù):

之前的沒(méi)高畫(huà)質(zhì),換個(gè)視頻舉例
qn參數(shù)值對(duì)應(yīng)表

返回同上,參數(shù)設(shè)定你會(huì)獲取到1080p+畫(huà)質(zhì)的flv視頻,如果視頻沒(méi)有對(duì)應(yīng)畫(huà)質(zhì)選項(xiàng),那么它會(huì)在大會(huì)員畫(huà)質(zhì)中選擇對(duì)應(yīng)數(shù)值小于112且最大的,比如一個(gè)60幀視頻,qn=112,返回720p60。

當(dāng)然這個(gè)請(qǐng)求會(huì)依賴(lài)于cookie,也就是它需要驗(yàn)證瀏覽器登錄的帳號(hào)是否有大會(huì)員,沒(méi)有則只會(huì)返回1080p畫(huà)質(zhì)。如果沒(méi)有登錄,則只有480p(也就是無(wú)賬號(hào)游客可觀看的最高畫(huà)質(zhì))。

(所以說(shuō)白嫖是不可能的啦……)

如果想要4K畫(huà)質(zhì)的視頻,按上面的方法(qn取120)是無(wú)法獲取的,這時(shí)候需添加參數(shù)fourk=1。

qn也要取120

這時(shí)候獲取到的是4K分辨率的flv視頻。

下載視頻

通過(guò)以上的一通操作,我們現(xiàn)在已經(jīng)有了視頻的下載鏈接。

鏈接有時(shí)效

這時(shí)候,直接用瀏覽器訪問(wèn)該鏈接會(huì)報(bào)403。

這是因?yàn)槿鄙僬?qǐng)求referer標(biāo)頭。referer內(nèi)容是啥?從抓播放視頻時(shí)瀏覽器的請(qǐng)求記錄可知它就是播放頁(yè)的地址。(av號(hào)也可以)

https://www.bilibili.com/video/BV17p4y1D7dA

多P稿件需指定P的標(biāo)號(hào):(BV1Yv411z7q3?的2P)

https://www.bilibili.com/video/BV1Yv411z7q3?p=2

下載工具我使用aria2c,這是一個(gè)命令行(本體無(wú)圖形界面)的開(kāi)源多協(xié)議多線程下載器。功能類(lèi)似IDM,但還支持種子以及磁鏈的下載。使用它一是因?yàn)槲疫€算比較熟悉使用,二是它可以在添加下載任務(wù)時(shí)手動(dòng)加入標(biāo)頭。

aria2c下載:https://github.com/aria2/aria2/releases

aria2c命令 (aria2c已加入Windows環(huán)境變量,示例下載位置為“C:\User\ZHY”)

下載即可得到flv視頻,包含音視頻。

進(jìn)階篇

下載dash源以及H265視頻

最開(kāi)始從瀏覽器抓下來(lái)的接口調(diào)用的參數(shù)好像不止以上的bvid(或avid)、cid、qn、fourk,之前的視頻中我是音視頻分開(kāi)下載再后期合并。

其實(shí)這些參數(shù)中有些是不必要手動(dòng)輸入(對(duì)于達(dá)成我們的目的來(lái)說(shuō))fnval算是一個(gè)有點(diǎn)用的參數(shù),這里就取值16

返回的數(shù)據(jù)結(jié)構(gòu)就與之前的相比差異比較大了。

這里獲取的是當(dāng)前網(wǎng)頁(yè)端以及APP端所使用的dash源視頻,特點(diǎn)是音視頻是分開(kāi)的,并且下載到的文件擴(kuò)展名為m4s,如果你經(jīng)常在安卓APP上緩存視頻,并查看過(guò)下載的文件,擴(kuò)展名是一樣的,且音視頻都是分開(kāi)的。dash下的audio和video分別就是音視頻,展開(kāi)獲得鏈接,下載方法與上面相同。

你應(yīng)該也發(fā)現(xiàn)了視頻video中每個(gè)id對(duì)應(yīng)著畫(huà)質(zhì),qn設(shè)定為120卻獲取到了所有的畫(huà)質(zhì)級(jí)別,并且每種畫(huà)質(zhì)都有兩條。

這兩條分別對(duì)應(yīng)著傳統(tǒng)H264的視頻源,以及新式的H265的視頻源

h265
H264 AVC

HEVC的規(guī)格為8bit,這個(gè)格式目前在WEB端沒(méi)有使用,APP在用。(不是所有視頻都有)

Aria2c?簡(jiǎn)單使用方法

從GitHub可以直接下載編譯好的windows版本。

解壓后只有一個(gè)可執(zhí)行程序?aria2c.exe?這個(gè)是本體了。

你可以選擇添加到環(huán)境變量,shell?cmd中可以快速調(diào)用,也可以直接拖到Powershell或cmd中,后面空格加上命令參數(shù)

Python?編程實(shí)現(xiàn)

有了上面思路步驟,基本上就可以依靠request模塊的get()以及json模塊來(lái)發(fā)起GET請(qǐng)求調(diào)用接口解析數(shù)據(jù)了,下載通過(guò)subprocess模塊調(diào)用aria2c下載以及ffmpeg合并音視頻。

在get()的使用上,添加了header(請(qǐng)求標(biāo)頭包含cookie以實(shí)現(xiàn)下載大會(huì)員視頻)

執(zhí)行效果:

源代碼:https://github.com/Daniel2022/bilibili_own_tools (本人的帳號(hào)cookie已剔除)

延伸

dash源不是所有時(shí)候都返回所有畫(huà)質(zhì)的鏈接

何為DASH

H265格式觸發(fā)的個(gè)人推測(cè)

API調(diào)用簡(jiǎn)單實(shí)戰(zhàn)

參考資料

https://segmentfault.com/a/1190000017511459 【關(guān)于bilibili視頻下載的一些小思路?原作者:shabby】

頭圖PID:69606244

『B站API學(xué)習(xí)』不使用插件下載B站視頻的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
平昌县| 禹州市| 阜城县| 彭泽县| 桃源县| 徐汇区| 丰镇市| 镇江市| 泽州县| 新泰市| 瓦房店市| 高安市| 巴青县| 宜章县| 兴城市| 东海县| 宜昌市| 垣曲县| 涞水县| 和顺县| 和林格尔县| 桐城市| 呼图壁县| 台湾省| 临武县| 三台县| 敦化市| 赤峰市| 江都市| 凯里市| 五莲县| 潼关县| 五大连池市| 夏邑县| 离岛区| 如东县| 建昌县| 临漳县| 丹巴县| 和政县| 磴口县|