欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于Python制作B站視頻下載小工具

 更新時間:2022年01月11日 16:41:23   作者:程序員迪迪  
這篇文章主要為大家介紹一個小工具,可以用于B站視頻的下載,只需要輸入對應視頻的網頁地址就可以進行下載到本地了。感興趣的可以了解一下

1. 原理簡介

原理很簡單,就是獲取視頻資源的源地址,然后爬取視頻的二進制內容,再寫入到本地即可。

2. 網頁分析

打開該網頁,然后F12進入開發(fā)者模式,接著點開網絡—>全部,因為視頻資源一般比較大,我這里根據大小進行了從大到小的排序,找到了第一條這些可能和視頻源地址有關。

然后,我們復制找到的這條里的url部分不變的部分,回到元素中ctrl+F搜索,找到了可能和視頻源地址有關的節(jié)點。

果然,我們復制這部分內容,用json在線解析工具發(fā)現真的有我們需要的看似視頻文件所在的地址。

然后,我復制這個地址用瀏覽器打開發(fā)現提示403了。。

不過,沒關系。。我們看接下來的操作!

3. 視頻爬取

在網頁分析部分,我們可以在視頻的B站地址網頁源代碼里通過各種數據解析的方式來獲取視頻文件的源地址,這里我采用的是正則表達式。

import?requests
import?re
import?json?

url?=?'https://www.bilibili.com/video/BV1BU4y1H7E3'

headers?=?{
????"User-Agent":?"Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/87.0.4280.66?Safari/537.36",
????"referer":?"https://www.bilibili.com"
????}

resp?=?requests.get(url,?headers=headers)

palyinfo?=?re.findall(r'<script>window.__playinfo__=(.*?)</script>',?resp.text)[0]

palyinfo_data?=?json.loads(palyinfo)

由于正在表達式獲取的結果是字符串,而實際上它是json(字典),所以這里需要再引入json庫來進行轉化。

我們再分析數據,可以發(fā)現最終視頻文件的信息,直接key-value操作就行了。比較有意思的是視頻和音頻文件是分開的,我們需要分別爬取后再合并即可。

#?視頻與音頻文件地址
video_url?=?json_data['data']['dash']['video'][0]['base_url']
audio_url?=?json_data['data']['dash']['audio'][0]['base_url']

有朋友可能會發(fā)現,base_url貌似有好多個。是的,因為視頻清晰度有很多種嘛。這里我選取的是第一種超清 4K,大家可以根據自己需求進行選擇!

當然了,我們把視頻存入本地的時候還需要起個名字,這里隨便找個節(jié)點解析出文件名就行了。

#?視頻標題
title?=?re.findall(r'<h1?title="(.*?)"?class="video-title">',?resp.text)[0]

4. 存入本地

既然我們已經解析獲得了視頻的文件地址、音頻地址和文件名,那么直接就安排下載吧!

不過,我們在網頁分析的時候發(fā)現直接打開視頻和音頻文件地址會提示403,那么因為跳過去的來源不明確導致的,只需調整請求頭為如下即可:

headers?=?{
????"User-Agent":?"Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/87.0.4280.66?Safari/537.36",
????#?加上referer即可
????"referer":?"https://www.bilibili.com"
????}

搞定這些玩意后,我們就開始寫文件寫入本地的函數吧!

#?一般視頻是mp4,音頻是mp3
def?down_file(file_url,?file_type):
????headers?=?{
????????"User-Agent":?"Mozilla/5.0?(Windows?NT?10.0;?Win64;?x64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/87.0.4280.66?Safari/537.36",
????????"referer":?"https://www.bilibili.com"
????????}
????resp?=?requests.get(url?=?file_url,?headers=headers)
????print(resp.status_code)
????
????print(f'文件名稱:{title}')
????#?設置單次寫入數據的塊大小
????chunk_size?=?1024
????#?獲取文件大小
????file_size?=?int(resp.headers['content-length'])
????#?用于記錄已經下載的文件大小
????done_size?=?0
????#?將文件大小轉化為MB
????file_size_MB?=?file_size?/?1024?/?1024
????print(f'文件大?。簕file_size_MB:0.2f}?MB')
????start_time?=?time.time()
????with?open(title?+?'.'?+?file_type,?mode='wb')?as?f:
????????for?chunk?in?resp.iter_content(chunk_size=chunk_size):
????????????f.write(chunk)
????????????done_size?+=?len(chunk)
????????????print(f'\r下載進度:{done_size/file_size*100:0.2f}%',end='')
????end_time?=?time.time()
????cost_time?=?end_time-start_time
????print(f'\n累計耗時:{cost_time:0.2f}?秒')
????print(f'下載速度:{file_size_MB/cost_time:0.2f}M/s')

運行結果:

# 視頻下載
>>>down_file(video_url, 'mp4')
200
文件名稱:【咒術回戰(zhàn)】第20集五條悟帥的有些過分了
文件大?。?2.10 MB
下載進度:100.00%
累計耗時:5.72 秒
下載速度:7.36M/s
# 音頻下載
>>>down_file(audio_url, 'mp3')
200
文件名稱:【咒術回戰(zhàn)】第20集五條悟帥的有些過分了
文件大?。?.13 MB
下載進度:100.00%
累計耗時:0.80 秒
下載速度:6.42M/s

我們在本地可以看到下載成功的視頻文件:

由于視頻和音頻是分開的,所以單獨打開這個視頻是沒有聲音的,我們需要進行合并操作。

合并操作需要用到moviepy庫,關于這個庫我們后續(xù)也會介紹它的更多應用,敬請期待~

from?moviepy?import?*
from?moviepy.editor?import?*

video_path?=?title?+?'.mp4'
audio_path?=?title?+?'.mp3'

#?讀入視頻
video?=?VideoFileClip(video_path)
#?提取音軌
audio?=?AudioFileClip(audio_path)
#?將音軌合并到視頻中
video?=?video.set_audio(audio)
#?輸出
video.write_videofile(f"{title}(含音頻).mp4")

就這樣搞定了:

Moviepy - Building video 【咒術回戰(zhàn)】第20集五條悟帥的有些過分了(含音頻).mp4.
MoviePy - Writing audio in 【咒術回戰(zhàn)】第20集五條悟帥的有些過分了(含音頻)TEMP_MPY_wvf_snd.mp3
MoviePy - Done.                                                       
Moviepy - Writing video 【咒術回戰(zhàn)】第20集五條悟帥的有些過分了(含音頻).mp4

Moviepy - Done !
Moviepy - video ready 【咒術回戰(zhàn)】第20集五條悟帥的有些過分了(含音頻).mp4

5. GUI工具制作

這個吧,就是用我常用的pysimplegui來操作了,比較簡單。

import?PySimpleGUI?as?sg

#?主題設置
sg.theme('SystemDefaultForReal')

#?布局設置
layout?=?[[sg.Text('選擇B站視頻地址:',font=("微軟雅黑",?12)),sg.InputText(key='url',size=(50,1),font=("微軟雅黑",?10),enable_events=True)?],
??????????#?[sg.Output(size=(66,?8),font=("微軟雅黑",?10))],??
???????????[sg.Button('開始下載',font=("微軟雅黑",?10),button_color?='Orange'),
???????????sg.Button('關閉程序',font=("微軟雅黑",?10),button_color?='red'),]
??????????]??????

#?創(chuàng)建窗口
window?=?sg.Window('B站視頻下載工具',?layout,font=("微軟雅黑",?12),default_element_size=(50,1))????

#?事件循環(huán)
while?True:
????event,?values?=?window.read()
????if?event?in?(None,?'關閉程序'):
????????break
????if?event?==?'開始下載':
????????url?=?values['url']
????????print('獲取視頻信息')
????????title,?video_url,?audio_url?=?get_file_info(url)
????????print('下載視頻資源')
????????down_file(title,?video_url,?'mp4')
????????print('下載音頻資源')
????????down_file(title,?audio_url,?'mp3')???
????????print('合并視頻與音頻')
????????merge(title)
????????print('有音頻視頻處理完成')
window.close()

以上就是基于Python制作B站視頻下載小工具的詳細內容,更多關于Python B站視頻下載的資料請關注腳本之家其它相關文章!

相關文章

  • 目前最全的python的就業(yè)方向

    目前最全的python的就業(yè)方向

    Python是一門面向對象的編程語言,編譯速度超快,從誕生到現在已經25個年頭了。其特點在于靈活運用,因為其擁有大量第三方庫,所以開發(fā)人員不必重復造輪子,就像搭積木一樣,只要擅于利用這些庫就可以完成絕大部分工作
    2018-06-06
  • Python虛擬環(huán)境virtualenv創(chuàng)建及使用過程圖解

    Python虛擬環(huán)境virtualenv創(chuàng)建及使用過程圖解

    這篇文章主要介紹了Python虛擬環(huán)境virtualenv創(chuàng)建及使用過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-12-12
  • Django框架中的對象列表視圖使用示例

    Django框架中的對象列表視圖使用示例

    這篇文章主要介紹了Django框架中的對象列表視圖使用示例,Django是重多Python人氣web框架中最為著名的一個,需要的朋友可以參考下
    2015-07-07
  • python manage.py runserver流程解析

    python manage.py runserver流程解析

    這篇文章主要介紹了python manage.py runserver流程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-11-11
  • PyQt Qt Designer工具的布局管理詳解

    PyQt Qt Designer工具的布局管理詳解

    這篇文章主要介紹了PyQt Qt Designer工具的布局管理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 利用Python實現面部識別的方法詳解

    利用Python實現面部識別的方法詳解

    人臉識別正在成為軟件開發(fā)中的一種趨勢。它有助于識別人臉并使應用程序更加健壯。本文將使用python和face_recognition庫創(chuàng)建一個簡單的人臉識別,需要的可以參考一下
    2022-05-05
  • Python量化交易實戰(zhàn)之使用Resample函數轉換“日K”數據

    Python量化交易實戰(zhàn)之使用Resample函數轉換“日K”數據

    resample函數是Python數據分析庫Pandas的方法函數,它主要用于轉換時間序列的頻次,今天通過本文給大家分享python使用Resample函數轉換時間序列的相關知識,感興趣的朋友一起看看吧
    2021-06-06
  • python自動提取文本中的時間(包含中文日期)

    python自動提取文本中的時間(包含中文日期)

    這篇文章主要介紹了python自動提取文本中的時間(包含中文日期),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • Python爬蟲制作翻譯程序的示例代碼

    Python爬蟲制作翻譯程序的示例代碼

    這篇文章主要介紹了Python爬蟲制作翻譯程序的示例代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • 快速進修Python指南之網絡編程及并發(fā)編程

    快速進修Python指南之網絡編程及并發(fā)編程

    這篇文章主要為大家介紹了Java開發(fā)者如何快速進修Python指南之網絡編程及并發(fā)編程實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12

最新評論