【小技巧】一招教你下載b站視頻到本地

路人神對話

看B站的時候,有時候看到很喜歡的總想下載下來,雖然APP裏提供了下載,但奈何下載的格式不知道是什麼格式,無法在其他播放器裏看,於是就想下載到電腦本地播放。當然,就目前而言,WiFi和流量其實足以替代大部分硬件存儲。所以這個需求不是很高,只是個人愛好。

在這裏插入圖片描述

那麼什麼視頻是可以下載,什麼視頻不能下載呢?

可以這麼說:只要你能在網頁觀看的視頻,都是可以下載的,因爲你的瀏覽器接受到了視頻文件才能播放,而我們只需要獲取到這些文件就行。當然這依個人技術和網站,有些網站就是不讓你下載,層層加密,一般人破解不了,但這只是個別,大部分還是正常的,因爲要層層加密網站開發可是要多出錢的。加密的話一般是將視頻的接口加密,也有在視頻文件上做手腳的。

現在我們就B站舉個例子

首先,打開某個視頻鏈接,按F12,然後將所有的數據清除,點擊播放視頻,這樣network裏面就有很多數據
在這裏插入圖片描述接着,我們一條一條數據看,直到你看到下面這樣的
在這裏插入圖片描述
那麼,右邊的這些是什麼意思呢,這是二進制數據,所有以文本格式打開會顯示亂碼,這些大概率是視頻文件,圖片的話瀏覽器是會正常顯示的。我們接着看headers裏的信息。
在這裏插入圖片描述我們來解讀一下headers裏面的信息

Request URL: **發起請求的URL,視頻的下載地址**
Request Method: 請求的類型,視頻下載正常爲GET
Status Code: 狀態碼,206的話說明鏈接下的文件是支持range參數的,也就是說我請求頭裏加一個range參數,說明你想要文件的哪一段,這爲文件的斷點續傳和多進程下載提供了便利
Remote Address: 服務器地址,沒什麼軟用

解讀其他

接着看響應頭(response headers):

Content-Length: 返回文件長度
Content-Range: bytes4389834-4589025/24268406 (文件位置和總長度,單位字節)
content-type: video/mp4 ,文件類型

這三個是我們看中的,其他沒什麼用

請求頭(requests headers)
Provisional headers are shown ,這句話是谷歌瀏覽器的毛病,只會顯示一部分請求頭,如果爬蟲不會返回數據,則需要使用抓包軟件查看完整請求頭了

Origin: 值不重要,加入爬蟲頭信息就行
Range:bytes=4389834-4589025 ,你要請求的數據
Referer:訪問的上一個頁面,一般會動態構建,比如av地址
User-Agent: 這個不多說

我們先分析URL是怎麼來的,看一下沒什麼規律,應該不是動態構建的(如果是則需要查看想要js代碼),那麼要麼是通過接口返回的,要麼是在從原網頁中和網頁結構一起返回的,比如https://www.bilibili.com/video/av49336067/。我們先刷新一下頁面,將請求URL爲https://www.bilibili.com/video/av49336067/鏈接的response的內容負責到記事本,Ctrl+f搜索剛纔視頻的鏈接,如果沒有則搜索鏈接裏面的一些關鍵詞,應該有可能數據在js裏面,然後動態構建的。

接着今天教材結束,因爲視頻鏈接確實在網頁返回的數據中,不過當一個網頁含有多個視頻的時候,就有一點小小的區別,這時候網頁數據裏沒有視頻鏈接,需要帶上aid和cid請求另一個接口得到視頻的下載地址,這裏就不多說了,具體看代碼或者自己去嘗試。B站沒有任何加密很簡單。

代碼:https://github.com/kanadeblisst/BDVide

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章