bilibili_video_download.exe是一款Python編寫做成的可以批量下載BiliBili視頻的下載器軟件,導(dǎo)入的庫包括用于爬取和解析網(wǎng)頁的庫,還包括創(chuàng)建線程池的庫和進行其他處理的庫,大多數(shù)都是Python自帶的。
軟件說明
軟件前言
在正常情況下(不使用其他工具或插件),Web端的bilibili似乎無法(徹底白嫖)下載視頻,遂學(xué)習(xí)了如何利用Python爬蟲下載b站視頻(不包括會員視頻),詳情(手法)且看下文。
參考視頻:https://www.bilibili.com/video/BV1Fy4y1D7XS
在分析b站網(wǎng)頁源代碼的過程中發(fā)現(xiàn)其視頻和音頻是分開的,下載后一個只有聲音,一個只有畫面,這顯然不能滿足我們的要求。解決方案是:利用 ffmpeg 這款強大的開源工具把下載后的音視頻進行合并。故想要完美體驗,先得下載安裝并配置好 ffmpeg 。(到官網(wǎng)下載,解壓后把文件夾內(nèi)的bin 添加到環(huán)境變量)
Python中使用到的模塊有:requests、re、json、subprocess、os
準備工作
視頻的url比較顯眼,容易獲取。headers也好找,但還需要一重要信息。
通過瀏覽器(F12)查看分析目標網(wǎng)頁,找到我們的下一目標,即視(音)頻下載鏈接。
一番查找后,發(fā)現(xiàn)在head里的第四個script 標簽內(nèi)似乎有我們想要的東西。
可訪問此鏈接,卻出現(xiàn)403,即沒有權(quán)限訪問此站。
這又怎么回事?查看Request Headers 信息,發(fā)現(xiàn)沒有referer這一項,于是嘗試在數(shù)據(jù)包中加上referer信息看能否訪問。(這里直接上bp了)
Forward后,出現(xiàn)文件下載頁面。
下載后打開改文件,確為目標視頻。
獲取數(shù)據(jù)
通過requests庫向目標站點發(fā)起請求,請求需包含header、referer等信息,以偽裝成是瀏覽器發(fā)出請求。如果服務(wù)器能正常響應(yīng),會得到一個Response,便是所要獲取的頁面內(nèi)容。
測試代碼:
運行結(jié)果:
解析內(nèi)容
得到的內(nèi)容可能是HTML、json等格式,可以用頁面解析庫、正則表達式等進行解析。
title信息比較好找,就在head中。
利用正則表達式對其進行提取。
復(fù)制代碼 隱藏代碼 title = re.findall('<title data-vue-meta="true">(.*?)</title>',html_data)[0].replace("_嗶哩嗶哩 (゜-゜)つロ 干杯~-bilibili",""
音視頻下載鏈接在json數(shù)據(jù)中。
利用正則表達式和字典(列表)的“鍵”對其提取。
測試代碼:
運行結(jié)果:
保存數(shù)據(jù)
通過下載鏈接,將音視頻下載到本地并保存。
測試代碼:
運行結(jié)果:
合并音視頻
把分開的音頻和視頻進行合并。(幾次測試下來,發(fā)現(xiàn)如果用視頻標題作為文件名去執(zhí)行ffmpeg命令會導(dǎo)致其出現(xiàn)錯誤,暫時沒找到解決方法,后來試著將文件名先重命名為1.mp3、1.mp4這種簡單的名字,可以完成合并,再刪除之)
測試代碼:
運行結(jié)果:
合并后視頻正常播放,有聲有色。
最終代碼
效果:
打包成exe
首先我們要先安裝Pyinstaller,直接在cmd使用pip命令
然后,把ffmpeg和py文件放置到同一文件夾下。
因為ffmpeg是要一起打包的,需要對代碼中的相應(yīng)目錄做小幅修改。修改后的代碼如下:
修改好后,cmd切換到我們剛剛放文件的目錄,執(zhí)行如下命令:
(這里-i bilibili.ico是對程序的圖標進行設(shè)置,為可選項)
執(zhí)行完畢會發(fā)現(xiàn)當前目錄多了幾個文件夾,打開其中名為dist的文件夾,里面生成了一個名為bilibili_video_download的exe應(yīng)用程序,并且圖標也是我們設(shè)置的圖案。(這里要把exe文件移動到上一級目錄,即ffmpeg的同級目錄)
使用說明
點擊運行exe應(yīng)用程序,輸入視頻URL即可下載。
下載完畢!