文章目录
一、叨叨几句
- 一、叨叨几句
- 二、效果展示
- 下载视频
- 下载弹幕
- 下载评论
- 软件生成
- 打包
兄弟们,小破站的视频在网页观看的时候正常是没有下载按钮的,但是这又怎么能难倒程序员呢?
今天来打造一个不是程序员也能实现通过BV号就能下载的软件,视频、弹幕、评论统统下载下来。
到时候还能分享给你的小伙伴来使用,简直就是装逼必备哇!
拿好小本本做笔记,车门已经焊死,准备发车!
二、效果展示我们先来看看效果
整体界面
我随便找个视频下载一下
弹幕和评论我都顺便下载了
有一说一,确实方便,就是下载视频太大的话,会卡一下。
不过我这里视频没有做去水印,所以下载下来还是有水印的。
接下来看看代码
下载视频数据请求模块 ,第三方模块,需要在cmd里进行 pip install requests 安装
import requests
正则表达式,内置模块 ,不需要安装
import re
json模块 ,内置模块, 不需要安装
import json
格式输出模块,内置模块 ,不需要安装
from pprint import pprint
导入进程
import subprocess
文件操作模块
import os
发送请求
url = f'https://****.com/video/{bv_id}'
headers = {
'referer': 'https://****.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'
}
获取数据, 获取服务器返回响应数据 —> 文本数据 print(response.text)
response = requests.get(url=url, headers=headers)
解析数据,提取我们想要数据内容。
正则表达式 —> 对于字符串数据类型进行提取/解析 re模块findall() ----> 告诉程序从什么地方去找什么数据 re.findall() '“title”:“(.?)“,“pubdate”', response.text 从 response.text 里面 去找 “title”:”(.?)”,“pubdate” 其中括号里内容就是我们要的。
title = re.findall('"title":"(.*?)","pubdate"', response.text)[0].replace(' ', '')
html_data = re.findall('window.__playinfo__=(.*?)', response.text)[0]
json_data = json.loads(html_data)
audio_url = json_data['data']['dash']['audio'][0]['baseUrl']
video_url = json_data['data']['dash']['video'][0]['baseUrl']
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
下载弹幕
部分代码展示
def 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 response
def get_Dm_url(bv_id):
link = f'https://www.*****/video/{bv_id}/'
html_data = get_response(link).text
Dm_url = re.findall('弹幕', html_data)[0]
title = re.findall('
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?