1. 程式人生 > 其它 >用python爬取B站視訊

用python爬取B站視訊

最近剛學了爬蟲,拿B站練了下手。

學習了@鑫xing這篇,他已經講的很詳細了,感謝作者。

我只是對其中一些地方做了簡化,還有一些失效的部分做了修改,歡迎探討。

下面是完整的程式碼

import requests
from lxml import html
import re
import json
import os


def get_title_json(url):
    head = {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.67
' } r = requests.get(url, headers=head) #通過xpath獲取視訊的標題 tree = html.fromstring(r.text) title = str(tree.xpath('//*[@id="viewbox_report"]/h1/@title')[0]) #除去標題中的奇怪字元,這些字元會影響檔名的儲存,產生未知錯誤 s = ['\n', '', '', ' ', '', '', '', '', '', '', '','|'] for i in s: title
= title.replace(i, '') print(f'視訊標題:"{title}"') #通過re獲取包含視訊和音訊地址的json欄位 json_data = re.findall('<script>window.__playinfo__=(.*?)</script>', r.text)[0] json_data = json.loads(json_data) audio_url = json_data['data']['dash']['audio'][0]['backupUrl'][0] print('已提取到音訊地址
') video_url = json_data['data']['dash']['video'][0]['backupUrl'][0] print('已提取到視訊地址') return title,audio_url,video_url def download(title,audio_url,video_url): #這裡的head加上Referer,避免讓網站發現自己是爬蟲 head = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36 Edg/91.0.864.67', 'Referer':url } print('開始下載音訊') r_audio = requests.get(url=audio_url, headers=head) audio_data = r_audio.content with open(title+'.mp3', mode='wb') as f: f.write(audio_data) print('音訊下載完成') print('開始下載視訊') print('下載中,請稍等...') r_video = requests.get(url=video_url, headers=head) video_data = r_video.content with open(title+'.mp4', mode='wb') as f: f.write(video_data) print('視訊下載完成') def audio_video_add(title): print('開始合成') cmd=f' ffmpeg -i {title}.mp4 -i {title}.mp3 -acodec copy -vcodec copy bili_{title}.mp4' #呼叫cmd執行ffmpeg程式來合併音訊和視訊 os.system(cmd) #刪除原來的音訊和視訊 os.remove(title+'.mp4') os.remove(title+'.mp3') print('合成結束') if __name__ == "__main__": while True: value=input('輸入該視訊的有效連結地址:(輸入quit退出)') if value=='quit': break else: url=value title,audio_url,video_url=get_title_json(url) download(title,audio_url,video_url) audio_video_add(title)


這裡藉助了一個視訊處理工具ffmpeg,需要先下載安裝,這裡是ffmpeg的安裝教程,然後記得加入環境變數。如果執行時提示“ffmpeg不是系統內部或外部的命令”,重啟一下電腦即可。我在這裡困了四五個小時,原來重啟一下就好了,哎。。