Python爬取B站視訊,只需一個B站視訊地址,即可任意下載
阿新 • • 發佈:2020-12-18
前言
本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯絡我們以作處理。
B站是國內知名的視訊彈幕網站,有最及時的動漫新番,ACG氛圍,最有創意的Up主。站點中的視訊資料分成了視訊畫面和音訊資料。
今天帶大家下載以及合併B站的視訊。
Python 資料分析入門案例講解
https://www.bilibili.com/video/BV1LX4y1u7VA
環境介紹:
- python 3.6
- pycharm
- requests
- re
- json
- subprocess
解析網頁
目標網頁分析
B站的視訊和音訊是分開的,音訊url和視訊url都在<script>window.__playinfo__=</script>裡面
提取資料
1、正則匹配提取資料
2、正則提取出資料為一個列表,通過列表取值,取出
3、字串轉json資料
4、通過字典取值的方式,提取視訊url以及音訊url
爬蟲程式碼
匯入工具
import requests import re # 正則表示式 import pprint import json import subprocess
請求頭
headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'}
請求資料
def send_request(url): response = requests.get(url=url, headers=headers) return response
解析視訊資料
def get_video_data(html_data): """解析視訊資料""" # 提取視訊的標題 title = re.findall('<span class="tit">(.*?)</span>', html_data)[0] # print(title) # 提取視訊對應的json資料json_data = re.findall('<script>window\.__playinfo__=(.*?)</script>', html_data)[0] # print(json_data) # json_data 字串 json_data = json.loads(json_data) pprint.pprint(json_data) # 提取音訊的url地址 audio_url = json_data['data']['dash']['audio'][0]['backupUrl'][0] print('解析到的音訊地址:', audio_url) # 提取視訊畫面的url地址 video_url = json_data['data']['dash']['video'][0]['backupUrl'][0] print('解析到的視訊地址:', video_url) video_data = [title, audio_url, video_url] return video_data
儲存資料
def save_data(file_name, audio_url, video_url): # 請求資料 print('正在請求音訊資料') audio_data = send_request(audio_url).content print('正在請求視訊資料') video_data = send_request(video_url).content with open(file_name + '.mp3', mode='wb') as f: f.write(audio_data) print('正在儲存音訊資料') with open(file_name + '.mp4', mode='wb') as f: f.write(video_data) print('正在儲存視訊資料')
資料的合併
def merge_data(video_name): print('視訊合成開始:', video_name) # ffmpeg -i video.mp4 -i audio.wav -c:v copy -c:a aac -strict experimental output.mp4 COMMAND = f'ffmpeg -i {video_name}.mp4 -i {video_name}.mp3 -c:v copy -c:a aac -strict experimental output.mp4' subprocess.Popen(COMMAND, shell=True) print('視訊合成結束:', video_name)
效果圖
合併視訊與音訊
這裡使用到一個工具<ffmpeg>,FFmpeg是一套可以用來記錄、轉換數字音訊、視訊,並能將其轉化為流的開源計算機程式。
下載之後解壓即可,但是需要你設定環境變數。
1、我的電腦,滑鼠右鍵點選屬性
2、選擇系統高階設定
3、選擇環境變數
4、新增環境變數,複製檔案路徑,選擇新建新增即可