B站視頻自某年以後其緩存的視頻皆為分段分開的,比較不方便。因此個人想着用Python將其更加自動化。
既然視頻和音頻分開了,那麼必然需要先請求獲取視頻和音頻的url再通過各自的url分別獲取各自的內容。最後再藉助moviepy將視頻和音頻合成。
關於批量處理爬取,一開始想得過於複雜(當然,相較於其他更快的方式,基於此方式來說是複雜的),導致連連異常。經過一覺,發現豁然開朗。複雜點在於當找到位於Network中的關鍵name之後,想着更加自動化的獲取通用ID走了不少彎路。後面才發現通用ID就在網址中。
大體思路如下:在進入喜歡UP主的空間後,點擊播放全部(圖1),

圖1
→進入新頁面,發現網址(圖2),並沒有附着視頻BV,因此需要換一種方式思考。

圖2
→右鍵檢查頁面,在Network欄下發現了特殊name(圖3),裡面包含了Up主其他的視頻(圖4,5)。

圖3

圖4

圖5
→思路清晰起來了,我們可以通過請求圖2頁面,找到圖3所示信息群,再請求該URL獲取json數據迭代索引獲取各bv_id。
代碼及分析如下:
①獲取bv_id並導入相關

說明:User-Agent獲取在網頁Headers部,可自行獲取鍵入。
②構建循環附帶跳出條件

③構建bilibiliSpider()類
1.主體框架

說明:此處的合成視頻和音頻方法是調整過的,起初使用ffmpeg發現不太好使,經過交流群前輩指導改用moivepy,較方便且好使。
2.發出通用請求格式(方便

說明:global意味在於其他方法處需要請求內容。
3.請求獲取標題,JSON數據,視頻和音頻Url

說明:此處的title索引、jsonData索引、videoUrl索引、audioUrl索引和上文的Referer等信息皆可在圖中找到,獲取大概流程皆為右鍵檢查頁面獲取信息(圖6,7,8)。

圖6

圖7

圖8
4.保存數據

5.合成視頻和音頻

說明:路徑一定要對,不然找不到會報錯(可以自己設置路徑,前後統一即可)。後麵條件語句那開始是清楚之前單獨的視頻和音頻,合成後的名字多了加號,以防被系統按照單獨的視頻給誤刪。
起初使用ffmpeg合成視頻和音頻並不順利(圖9),因此改用moviepy。

圖9
6.調用方法

說明:全文盡量統一
全文代碼如下:




試運行:

綜上,還有提升空間,比如下載速度太慢。然後是畫質的選擇,爬的時候默認是最高的,具體自定義畫質還在研究(即文中的params貌似沒啥用,待測試)。
原創文章,作者:投稿專員,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/208983.html
微信掃一掃
支付寶掃一掃