使用 python 下载 bilibili 视频

本文想要达成的目标为:运行 python 代码之后,在终端输入视频链接,可自动下载高清 1080P 视频并保存到相应文件夹。
具体可分为两大步:首先,使用浏览器开发者工具 F12 获取请求链接相关信息(根据 api 接口下载?加密参数信息?是从 html 文件获取到具体的链接?链接在 html 文件中位置?);然后,确定使用的 python 库,并写出代码。

最后代码运行结果如图所示:

1. 确定请求链接信息

打开一个视频,对整个过程中的请求进行分析,确定视频链接和音频链接;(下图 1)
首先从 html 源码进行查找,找到了对应的音视频链接;(下图 2)
经过分析,可使用 beautifulsoup 库定位元素位置,标题定位为 bs.find('div', id='viewbox_report').find('div', class_='video-info-title').div.h1.string,视频链接定位为 bs.head.find_all('script', limit=4)[-1].string.lstrip('window.__playinfo__=')['data']['dash']['video'][2]['baseUrl'],音频链接定位为 bs.head.find_all('script', limit=4)[-1].string.lstrip('window.__playinfo__=')['data']['dash']['audio'][0]['baseUrl']

2. 使用 requests 库下载音视频文件

2.1. 获取 html 源代码

可使用以下函数获取 html 文档:(注:经测试,下载 1080p 视频需要在请求头中加入 登陆帐号cookie)

def _request_html(url: str):
    '''获取 html 文档源代码并返回'''
    response = get(url, headers={})
    response.encoding = response.apparent_encoding
    return response.text

2.2. 下载音视频文件并保存

然后,可根据上一步得到的链接位置,通过 bs 库对 html 文档进行解析,得到所需的 视频标题、视频链接、音频链接,使用 requests 库发送请求下载文件,并存储到本地。
注:因为音视频分离,所以可使用 aiohttp 进行异步下载,稍微提高效率;
注:为美观以及方便查看进度,可使用 rich 库添加进度条;
注:视频文件有时可能比较大,因此可使用流数据分块下载方式进行;
以下代码为提取所需信息代码,可进行参考:(注:首选视频链接有时会失效,因此需提取备用链接)

@staticmethod
def _extract_title_url(html: str):
    bs = BeautifulSoup(html, 'lxml')
    # 提取视频标题,并去除非法字符
    title = bs.find('div', id='viewbox_report').find('div', class_='video-info-title').div.h1.string
    for i in {'/', '\\', '|', '<', '>', '\'', '\"', '?', ':', '*', '\x00'}:
        title = title.replace(i, ' ')
    # 提取音视频链接
    info = bs.head.find_all('script', limit=4)[-1].string.lstrip('window.__playinfo__=')
    info_dict = loads(info)
    video_urls = (
        info_dict['data']['dash']['video'][2]['baseUrl'],
        info_dict['data']['dash']['video'][2]['backupUrl'][0]
    )
    audio_urls = (
        info_dict['data']['dash']['audio'][0]['baseUrl'],
        info_dict['data']['dash']['audio'][0]['backupUrl'][0],
    )

    return (title, video_urls, audio_urls)

3. 使用 ffmpeg 合并音视频

可使用 ffmpeg 进行音视频的合并,合并完毕后删除音视频文件。
注:使用 pip 安装时命令为:pip install ffmpeg-python
注:可使用 rich 库添加进度条
代码如下,可参考:

def _merge(video_path: str, audio_path: str, filepath: str):
    '''合并音视频'''
    with _progress_object_merge() as progress:
        progress.add_task('正在合并音视频', total=None)
        input_video = ffmpeg_input(video_path)
        input_audio = ffmpeg_input(audio_path)
        output = ffmpeg_output(input_video, input_audio, filepath, vcodec='copy', acodec='aac')
        ffmpeg_run(output, quiet=True)
        print(f'{filepath} 合并完成')
        remove(video_path)
        remove(audio_path)

def _progress_object_merge():
    '''合并音视频的进度条设置'''
    return Progress(
        TextColumn('[progress.description]{task.description}', style=CYAN, justify='left'),
        '•',
        BarColumn(bar_width=20),
        '•',
        TimeElapsedColumn(),
        transient=True,
    )
### 回答1: 您好,可以使用Python中的第三方库"you-get"来下载Bilibili视频。具体操作步骤如下: 1. 安装you-get库:在命令行中输入"pip install you-get",等待安装完成。 2. 打开Bilibili网站,找到想要下载视频,复制视频链接。 3. 在命令行中输入"you-get [视频链接]",等待下载完成。 注意:you-get支持下载Bilibili视频的原画、高清、普通等多种清晰度,可以在命令行中添加"-o [清晰度]"来指定下载清晰度。例如:"you-get -o 108P [视频链接]"表示下载108P清晰度的视频。 ### 回答2: Python是一种极其流行的编程语言,也是许多数据科学、爬虫等领域的首选编程语言。如果您想要下载Bilibili视频而又不想费力气去找相关软件,Python可以为您提供一种更好的解决办法。 首先,您需要确保您的电脑上装有Python解释器,可以在官方网站上进行下载。接下来,您需要安装一个Python模块——you-get。You-get是一个开源的终端下载器,支持多种网站的视频下载,包括Bilibili。 安装you-get非常简单,只需要在终端输入: ```python pip install you-get ``` 安装完成后,您就可以在终端输入以下命令来下载Bilibili视频了: ```python you-get -o [保存路径] [Bilibili视频链接] ``` 其中,-o选项是用来指定保存路径的,例如我想要把视频保存在桌面上,可以输入以下命令: ```python you-get -o ~/Desktop https://www.bilibili.com/video/av72866042 ``` 如果您想要下载Bilibili视频的弹幕,只需要在命令后加上-D选项即可: ```python you-get -o ~/Desktop -D https://www.bilibili.com/video/av72866042 ``` 这样您就可以轻松地使用Python下载Bilibili视频了。不过需要注意的是,这种下载方式只适用于下载个人使用视频,不要用于商业用途或传播侵权内容。 ### 回答3: Python作为一种高级编程语言,目前在数据分析、人工智能等领域得到了广泛的应用,在各种技术中,Python也扮演着重要的角色。本文将介绍如何使用Python下载Bilibili视频。而Python是一种通用语言,新手也可以通过学习Python,掌握这项技能。 使用Python下载Bilibili视频的方法如下: 1.安装相关库 在Python中,有一些库可以让我们很容易地下载Bilibili视频,比如youtube-dl和you-get等。在安装这些库之前,确保你的Python环境已经搭建好了。 使用pip安装youtube-dl 运行以下代码: ``` pip install youtube_dl ``` 使用pip安装you-get 运行以下代码: ``` pip install you-get ``` 2.选择要下载视频 使用Bilibili官方网站或手机应用程序,选择想要下载视频并获得视频的url地址。 3.使用命令行下载视频 a.使用youtube-dl下载 打开终端,输入以下代码: ``` youtube-dl -f <video format> <video url> ``` 其中video format是你想下载视频格式,video url是你想要下载视频链接。 例如:如果你想下载BiliBili上的MP4格式视频,可以使用以下代码: ``` youtube-dl -f mp4 <video url> ``` b.使用you-get下载 打开终端,输入以下代码: ``` you-get <video url> ``` 例如:如果你想下载BiliBili上的视频,可以使用以下代码: ``` you-get https://www.bilibili.com/video/BVXXXXXXXXX/ ``` 4.下载到本地 视频下载完成后,你可以在你选择的文件夹中找到已下载视频。 总结: Python为后来的程序提供了许多快速高效的解决方案,并且在下载Bilibili视频时提供了优越的扩展性和强大的媒体技术。无论是初学者还是专业人士,都可以学习和使用这些库,通过Python语言的优势来下载Bilibili视频。希望这篇文章可以帮助你快速地下载自己喜欢的Bilibili视频
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值