您当前的位置: 首页 >  Python

嗨学编程

暂无认证

  • 0浏览

    0关注

    1405博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

Python做一个通过输入bv号就能下载视频的工具,评论和弹幕也不放过

嗨学编程 发布时间:2022-08-30 14:51:17 ,浏览量:0

文章目录
  • 一、叨叨几句
  • 二、效果展示
  • 下载视频
  • 下载弹幕
  • 下载评论
  • 软件生成
  • 打包

一、叨叨几句

兄弟们,小破站的视频在网页观看的时候正常是没有下载按钮的,但是这又怎么能难倒程序员呢?

今天来打造一个不是程序员也能实现通过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('            
关注
打赏
1663681728
查看更多评论
0.2142s