📜  如何下载 youtube 视频的字幕 - Python (1)

📅  最后修改于: 2023-12-03 14:51:43.710000             🧑  作者: Mango

如何下载 YouTube 视频的字幕 - Python

在很多情况下,下载 YouTube 视频的字幕是非常有用的,特别是如果你需要翻译或者理解语言障碍。Python 有很多工具可以下载 YouTube 字幕,这篇文章将为你介绍其中的一些工具和步骤。

1. 使用 BeautifulSoup 库

BeautifulSoup 是一个简单但功能强大的库,可以帮助我们处理 HTML 和 XML 文件。我们可以使用 BeautifulSoup 解析 YouTube 页面,找到与字幕相关的元素,然后下载所需的字幕文件。

import requests
from bs4 import BeautifulSoup

# 视频 ID
video_id = 'xxxxxxxxxxx'
# 字幕语言
language_code = 'en'
# YouTube 页面 URL
youtube_url = f'https://www.youtube.com/watch?v={video_id}'

# 获取页面 HTML
response = requests.get(youtube_url)
soup = BeautifulSoup(response.text, 'lxml')

# 找到字幕的 <a> 元素
subtitle_link = soup.select_one(f'a[href*="{video_id}"][href*="tlang={language_code}"]')
if subtitle_link:
    # 下载字幕文件
    subtitle_url = subtitle_link['href']
    response = requests.get(subtitle_url)
    with open(f'{video_id}.{language_code}.srt', 'wb') as f:
        f.write(response.content)

这段代码首先获取视频页面的 HTML,并使用 BeautifulSoup 解析它。然后,我们按规则找到了字幕的 <a> 元素,进而下载了字幕文件。

2. 使用 Pytube 库

Pytube 是一个非常流行的 Python 库,可以用来下载 YouTube 视频和音频。它同样可以用来下载字幕。

from pytube import YouTube

# 视频 ID
video_id = 'xxxxxxxxxxx'
# 字幕语言
language_code = 'en'
# YouTube 页面 URL
youtube_url = f'https://www.youtube.com/watch?v={video_id}'

# 获取 YouTube 对象
yt = YouTube(youtube_url)

# 获取字幕列表
subtitles = yt.captions.all()
for subtitle in subtitles:
    if subtitle.code == language_code:
        # 下载字幕文件
        subtitle_url = subtitle.xml_url
        response = requests.get(subtitle_url)
        with open(f'{video_id}.{language_code}.srt', 'wb') as f:
            f.write(response.content)

这段代码首先使用 Pytube 获取了 YouTube 对象。然后,我们获取了字幕列表,并找到了我们需要的字幕。最后,我们下载了字幕文件。

3. 使用 youtube-dl 库

youtube-dl 是一个非常流行的命令行工具,可以用来下载许多不同来源的视频。它同样可以用来下载 YouTube 字幕。

import youtube_dl

# 视频 ID
video_id = 'xxxxxxxxxxx'
# 字幕语言
language_code = 'en'
# YouTube 页面 URL
youtube_url = f'https://www.youtube.com/watch?v={video_id}'

# 下载字幕文件
ydl_opts = {'writesubtitles': True, 'allsubtitles': True, 'subtitleslangs': [language_code]}
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    ydl.download([youtube_url])

这段代码使用 youtube-dl 库,设置了一些选项来下载字幕文件。我们在 subtitleslangs 中指定了字幕语言,可以下载多个语言的字幕。最后,我们调用 download 函数来下载视频和字幕。

以上就是三种下载 YouTube 字幕的方法,它们各有优点和缺点,选用适合自己的方法即可。