Python写一个下载B站内容的GUI工具,视频、弹幕、评论都能下载,真的太方便
今天我们分享一个用Python写下载视频+弹幕+评论的代码。之前自游写了采集小破站视频、弹幕、评论的代码,还录了视频。
我当时就问他,你就不能把这些写成GUI,把这些功能放到一起不是别人用起来更方便么?
本来他还想反抗,当时我就直接叫他看着办!
他哪受得了这种委屈,当时就乖乖写代码去了,现在我把代码分享给大家。
本次要实现的功能
咱们本次先简单的实现一下
[*]评论
[*]弹幕
[*]视频
效果展示
我们来看看实现效果吧
代码实战
主要代码分为界面和采集部分
获取数据
网址我屏蔽了,防止误杀。
获取视频
import requests
import re
import json
from pprint importpprint
import subprocess
import os
# 完整源码直接加这个Q裙领取 872937351
def Video(bv_id):
url = f'https://www.***.com/video/{bv_id}'
headers = {
# 防盗链
'referer': 'https://www.***.com/video/',
# 浏览器基本身份标识 表示浏览器
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36'
}
# 发送请求 ---> <Response > 响应对象,200状态码 表示请求成功
response = requests.get(url=url, headers=headers)
# 获取视频标题
title = re.findall('"title":"(.*?)","pubdate"', response.text).replace(' ', '')
# 获取视频数据信息 前端标签两个两个一起
html_data = re.findall('', response.text)
# 转换数据类型字符串数据转成json字典数据类型
json_data = json.loads(html_data)
# print打印字典数据, 输出一行内容 print(json_data)
# pprint 打印字典数据, 格式化输出 展开效果 pprint(json_data)
# 字典数据 B站数据 音频和视频分开的 根据冒号左边的内容, 提取冒号右边的内容 键值对取值
audio_url = json_data['data']['dash']['audio']['baseUrl']
video_url = json_data['data']['dash']['video']['baseUrl']
# 403 Forbidden 没有访问权限.....
audio_content = requests.get(url=audio_url, headers=headers).content
video_content = requests.get(url=video_url, headers=headers).content
if not os.path.exists('video\\'):
os.mkdir('video\\')
with open('video\\' + title + '.mp3', mode='wb') as audio:
audio.write(audio_content)
with open('video\\' + title + '.mp4', mode='wb') as video:
video.write(video_content)
# 获取音频内容以及视频画面内容
cmd = f"ffmpeg -i video\\{title}.mp4 -i video\\{title}.mp3 -c:v copy -c:a aac -strict experimental video\\{title}output.mp4"
subprocess.run(cmd, shell=True)
os.remove(f'video\\{title}.mp4')
os.remove(f'video\\{title}.mp3')
return title
采集弹幕
import requestsimport reimport osdef get_response(html_url): headers = { 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.0.0 Safari/537.36' } response = requests.get(url=html_url, headers=headers) response.encoding = response.apparent_encoding return responsedef get_Dm_url(bv_id): link = f'https://www.***.com/video/{bv_id}/' html_data = get_response(link).text Dm_url = re.findall('弹幕', html_data) title = re.findall('
页:
[1]