Python爬取B站视频,只需一个B站视频地址,即可任意下载[Python基础]
前言
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
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 requestsimport 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.mp4COMMAND = 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、添加环境变量,复制文件路径,选择新建添加即可
以上是 Python爬取B站视频,只需一个B站视频地址,即可任意下载[Python基础] 的全部内容, 来源链接: utcz.com/z/530342.html