提取器系统是 You-Get 的核心组件,负责从各种网站提取媒体 URL 和元数据。它为从 70 多个不同网站下载内容提供了一个统一的接口,每个网站都有其独特的结构和 API。本文档记录了提取器系统的架构、功能和用法。
有关整体下载流程的信息,请参阅 下载系统。有关 URL 如何映射到提取器的详细信息,请参阅 URL 路由。
提取器系统抽象了解析不同网站结构和 API 的复杂性,为 You-Get 的其余部分提供了一个一致的接口。它负责:
来源:src/you_get/extractor.py1-274 src/you_get/extractors/__init__.py1-87 src/you_get/common.py25-127
提取器系统围绕一系列类构建,这些类提供功能上越来越专业的服务。
来源:src/you_get/extractor.py10-20 src/you_get/extractor.py21-274
You-Get 提供了两个主要的基类来构建特定于站点的提取器:
Extractor:一个最小的基类,具有用于简单场景的基本属性
VideoExtractor:一个全面的基类,具有用于视频提取的扩展功能
VideoExtractor 类是更常用的基类,因为它提供了完整的下载工作流程的方法。
| 方法 | 目的 |
|---|---|
download_by_url(url, **kwargs) | 按 URL 下载的入口点 |
download_by_vid(vid, **kwargs) | 按视频 ID 下载的入口点 |
prepare(**kwargs) | 准备提取(解析网页,获取元数据) |
extract(**kwargs) | 提取实际的媒体 URL |
download(**kwargs) | 处理下载过程 |
p_stream(stream_id) | 打印特定流的信息 |
p(stream_id) | 打印可用流的信息 |
来源:src/you_get/extractor.py10-20 src/you_get/extractor.py21-274
提取器操作的典型工作流程遵循以下顺序:
来源:src/you_get/extractor.py42-62 src/you_get/extractor.py179-267
prepare():设置提取过程
extract():执行实际的 URL 提取
download():处理下载过程
info_only,则下载内容或显示信息来源:src/you_get/extractor.py82-88 src/you_get/extractor.py179-267
每个网站都有自己的提取器,它们继承自 VideoExtractor,并实现特定于站点的逻辑来提取媒体内容。
来源:src/you_get/extractors/bilibili.py10-153 src/you_get/extractors/imgur.py7-16
Bilibili 提取器展示了一个复杂的实现,具有许多特定于站点的功能。
来源:src/you_get/extractors/bilibili.py10-597
相比之下,Imgur 提取器要简单得多。
来源:src/you_get/extractors/imgur.py7-74
提取器管理两种类型的流字典:
self.streams):包含传统的媒体流self.dash_streams):包含 DASH 格式的流(单独的音频和视频)每个提取器都定义了自己的 stream_types 列表,该列表决定了可用质量级别及其优先级。
来源:src/you_get/extractors/bilibili.py14-42 src/you_get/extractor.py91-116
许多提取器需要处理多种媒体类型或不同的 URL 模式。这通常在 prepare() 方法中完成,通过以下方式:
例如,Bilibili 提取器处理多种内容类型。
来源:src/you_get/extractors/bilibili.py193-506
提取器系统主要通过 common.py 中的 URL 路由机制与 You-Get 主系统集成。
SITES 字典将域名映射到特定的提取器模块。url_to_module() 函数(在代码库中隐式定义)使用此字典来确定使用哪个提取器。any_download() 函数实例化相应的提取器并调用其方法。来源:src/you_get/common.py25-127 src/you_get/extractor.py42-62
要为新网站添加支持,通常需要:
extractors 目录中创建一个新的 Python 模块VideoExtractor 的类prepare() 方法common.py 的 SITES 字典中添加站点有关实现新提取器的详细信息,请参阅 添加新提取器。
提取器系统是 You-Get 支持广泛网站能力的核心。其模块化设计允许:
这种架构使 You-Get 能够以最小的代码重复和可维护的代码库支持 70 多个不同的网站。