1. 程式人生 > 實用技巧 >Python爬取B站視訊,只需一個B站視訊地址,即可任意下載

Python爬取B站視訊,只需一個B站視訊地址,即可任意下載

前言

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,如有問題請及時聯絡我們以作處理。

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、新增環境變數,複製檔案路徑,選擇新建新增即可