InfoExtractor 基类是 youtube-dl 提取系统的基础。它提供了从各种网站提取视频元数据和下载信息的核心功能。本页面记录了 InfoExtractor 类的架构、关键方法和用法模式,该类是 youtube-dl 代码库中所有特定网站提取器的父类。
有关特定平台提取器的信息,请参阅 特定平台提取器。有关通用提取器的详细信息,请参阅 通用提取器。
InfoExtractor 类位于 youtube-dl 提取系统的核心。当用户请求下载时,YoutubeDL 核心组件会确定哪个提取器应处理给定的 URL,并将提取过程委托给相应的 InfoExtractor 子类。
来源: youtube_dl/extractor/vimeo.py39-40/youtube_dl/extractor/brightcove.py9-10/youtube_dl/extractor/soundcloud.py7-10/youtube_dl/extractor/arte.py6-7
下面的图表说明了下载视频时的典型提取流程。
来源: youtube_dl/extractor/__init__.py19-46/test/test_download.py167-172
InfoExtractor 基类提供了丰富的实用工具集,供子类用于从不同网站提取视频信息。这些实用工具处理常见任务,如下载网页、解析 HTML 和 JSON 以及规范化元数据。
| 属性 | 类型 | 描述 |
|---|---|---|
_VALID_URL | 正则表达式 | 匹配此提取器可以处理的 URL 的模式 |
_WORKING | 布尔值 | 指示此提取器是否正常运行(默认为 True) |
_NETRC_MACHINE | 字符串 | 用于 .netrc 身份验证的机器名称 |
IE_NAME | 字符串 | 提取器的名称(默认为类名去掉 'IE') |
IE_DESC | 字符串 | 提取器的人类可读描述 |
来源: youtube_dl/extractor/generic.py137-140/youtube_dl/extractor/vimeo.py40-41/youtube_dl/extractor/vimeo.py291-292
InfoExtractor 类定义了几个核心方法,它们构成了提取过程的骨干。
suitable(url): 通过与 _VALID_URL 匹配来确定提取器是否可以处理给定的 URL。extract(url): 提取的主要入口点。通常在执行通用的设置任务后调用 _real_extract。_real_extract(url): 特定平台提取器必须实现以提取视频信息的方_download_webpage(url, video_id, ...): 从 URL 下载 HTML 内容。_download_json(url, video_id, ...): 从 URL 下载并解析 JSON 数据。_download_xml(url, video_id, ...): 从 URL 下载并解析 XML 数据。_search_regex(pattern, string, name, ...): 在字符串中搜索模式并返回匹配项。_html_search_regex(pattern, webpage, name, ...): 在 HTML 中搜索模式。_og_search_property(prop, html, ...): 从 HTML 中提取 Open Graph 元数据。_html_search_meta(name, html, ...): 从 HTML meta 标签中提取元数据。_sort_formats(formats): 根据质量对提取的格式进行排序。_extract_m3u8_formats(url, ...): 从 M3U8 manifest 中提取格式。_extract_mpd_formats(url, ...): 从 MPEG-DASH manifest 中提取格式。来源: youtube_dl/extractor/vimeo.py118-122/youtube_dl/extractor/brightcove.py11-37
要为特定网站创建新的提取器,您需要继承 InfoExtractor 基类并至少实现以下内容:
_VALID_URL 模式_real_extract 方法来处理提取逻辑大多数特定平台提取器的 _real_extract 方法遵循类似的模式
_VALID_URL 中的捕获组从 URL 中提取视频 ID来源: youtube_dl/extractor/vimeo.py259-548/youtube_dl/extractor/thestar.py28-36
信息字典(或 info_dict)是所有提取器返回的标准数据结构。它包含视频的元数据和可用的下载格式。
| 字段 | 类型 | 描述 |
|---|---|---|
id | 字符串 | 视频的唯一标识符 |
title | 字符串 | 视频标题 |
formats | 列表 | 具有质量信息的可用下载格式 |
thumbnails | 列表 | 可用的缩略图图像 |
description | 字符串 | 视频描述 |
upload_date | 字符串 | 上传日期,格式为 YYYYMMDD |
uploader | 字符串 | 上传者姓名 |
uploader_id | 字符串 | 上传者 ID |
duration | 数字 | 视频时长(秒) |
view_count | 数字 | 观看次数 |
like_count | 数字 | 点赞数 |
comment_count | 数字 | 评论数 |
subtitles | Dict | 按语言代码区分的可用字幕 |
有关信息字典中所有可能字段的完整参考,请参阅 YoutubeDL 类中的文档。
来源: youtube_dl/extractor/vimeo.py217-228/youtube_dl/extractor/soundcloud.py450-454
InfoExtractor 基类旨在处理各种提取场景。以下是特定平台提取器使用的一些常见模式:
对于公开直接视频 URL 的网站,提取器通常会
对于具有 API 的网站,提取器通常会
许多提取器通过以下方式处理嵌入式视频:
一些复杂的提取器会合并多个来源
来源: youtube_dl/extractor/generic.py137-289/youtube_dl/extractor/soundcloud.py318-445
InfoExtractor 基类提供了强大的错误处理机制,用于应对各种失败场景。
ExtractorError: 当提取因预期原因(地理限制、私有视频等)失败时引发。DownloadError: 下载网页或文件失败时引发。UnavailableVideoError: 视频不可用(已删除、私有等)时引发。提取器应引发适当的带有描述性消息的错误,以帮助用户理解提取失败的原因。InfoExtractor 基类提供了常见错误场景的辅助方法。
来源: youtube_dl/extractor/soundcloud.py301-308
InfoExtractor 基类并非孤立工作。它通过 ExtractorRegistry 与 YoutubeDL 核心紧密集成。
所有提取器类都会自动注册到 ExtractorRegistry,该注册表维护着可用提取器的列表。当 YoutubeDL 处理 URL 时,它会使用该注册表来查找适当的提取器。
来源: youtube_dl/extractor/__init__.py19-46
InfoExtractor 基类是 youtube-dl 能够以统一的接口支持数百个不同视频平台的基石。它提供了丰富的网页解析、元数据提取和格式处理实用工具集,特定平台提取器可以利用这些工具来实现特定网站的逻辑。
通过理解InfoExtractor类及其支持的提取模式,开发人员可以维护现有的提取器并创建新的提取器来扩展youtube-dl的功能。