#知识点 #Requests模块使用 #Json数据提取 #re模块使用 #os模块使用 #ffmpeg工具使用 import json import os import pprint import re from lxml import etree #1.爬取视频页的网页源代码 import requests headers={ 'referer':'https://www.bilibili.com', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36' } def get_paly_url(url): r=requests.get(url,headers=headers) #2.提取视频和音频的播放地址 info=re.findall('window.__playinfo__=(.*?)</script>',r.text)[0] video_url=json.loads(info)['data']['dash']['video'][0]['baseUrl'] audio_url=json.loads(info)['data']['dash']['audio'][0]['baseUrl'] html=etree.HTML(r.text) filename=html.xpath('//h1/text()')[0] # print(filename) return video_url,audio_url,filename #3.下载并保存视频和音频 def download_files(video_url,audio_url,filename,path): print('开始下载音频和视频...') video_content=requests.get(video_url,headers=headers).content audio_content = requests.get(audio_url, headers=headers).content with open(f'{path}/{filename}.mp4','wb') as f: f.write(video_content) print('已下载视频部分') with open(f'{path}/{filename}.mp3', 'wb') as f: f.write(audio_content) print('已下载音频部分') #4.合并视频和音频 #ffmpeg def combine_files(filename,path): cmd=fr"D:\python学习笔记课后题\ffmpeg-7.0.1-full_build\ffmpeg-7.0.1-full_build\bin\ffmpeg -i {path}\{filename}.mp4 -i {path}\{filename}.mp3 -c:v copy -c:a aac -strict experimental {path}\output-{filename}.mp4 -loglevel quiet" os.system(cmd) print('已完成合并!') os.remove(f'{path}\{filename}.mp4') os.remove(f'{path}\{filename}.mp3') print('已删除多余文件!') if __name__ == '__main__': path = 'D:\python学习笔记课后题\爬虫\实战\视频' url = 'https://www.bilibili.com/video/BV1AA4y1D7h2/?spm_id_from=333.337.search-card.all.click' video_url,audio_url,filename=get_paly_url(url) download_files(video_url, audio_url, filename, path) combine_files(filename, path)