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