此页面记录了 youtube-dl 中特定平台的提取器,这些提取器是为从特定网站或平台提取媒体而设计的专用组件。这些提取器继承自通用 InfoExtractor 基类(在 InfoExtractor 基类 中有详细说明),但实现了定位、解析和下载各自平台媒体所需的特定站点逻辑。
特定平台的提取器处理不同站点的独特挑战,包括:
来源:youtube_dl/extractor/bbc.py39-593 youtube_dl/extractor/dailymotion.py22-98
特定平台的提取器遵循 youtube-dl 代码库中的一致继承模式。
大多数特定平台的实现都遵循此模式:
来源:youtube_dl/extractor/bbc.py40-593 youtube_dl/extractor/dailymotion.py22-98 youtube_dl/extractor/crunchyroll.py40-106
提取器遵循一致的命名约定
| 类型 | 示例类 | 示例 IE_NAME |
|---|---|---|
| 主提取器 | CrunchyrollIE | crunchyroll |
| 播放列表提取器 | CrunchyrollShowPlaylistIE | crunchyroll:playlist |
| 频道/用户提取器 | DailymotionUserIE | dailymotion:user |
| 专辑/合集 | NetEaseMusicAlbumIE | netease:album |
来源:youtube_dl/extractor/crunchyroll.py121-635 youtube_dl/extractor/dailymotion.py354-393
每个提取器都定义了一个 _VALID_URL 正则表达式模式,以识别它可以处理的 URL。
URL 模式匹配示例
| 提取器 | _VALID_URL 模式(简化版) | 示例 URL |
|---|---|---|
| BBC | bbc\.co\.uk/(?:programmes|iplayer)/(?P<id>%s) | https://www.bbc.co.uk/programmes/b039g8p7 |
| Dailymotion | dailymotion\.com/(?:video|swf)/(?P<id>[^/?_]+) | https://www.dailymotion.com/video/x5kesuj |
| Crunchyroll | crunchyroll\.com/(?:media-|[^/]*/){1,2}[^/?&]*?(?P<id>[0-9]+) | http://www.crunchyroll.com/media-589804/culture-japan-1 |
来源:youtube_dl/extractor/bbc.py42-56 youtube_dl/extractor/dailymotion.py94-101 youtube_dl/extractor/crunchyroll.py122-123
大多数提取器都包含测试用例来验证其功能。
这些测试包括:
来源:youtube_dl/extractor/dailymotion.py103-185 youtube_dl/extractor/bbc.py72-266
特定平台提取器的典型提取流程
来源:youtube_dl/extractor/bbc.py541-592 youtube_dl/extractor/dailymotion.py206-322 youtube_dl/extractor/crunchyroll.py414-635
许多提取器支持身份验证以访问付费或受限内容。
提取器通常使用:
_NETRC_MACHINE 来识别 .netrc 的哪个部分会被使用_get_login_info() 来检索凭据_real_initialize() 在启动时运行登录来源:youtube_dl/extractor/bbc.py268-296 youtube_dl/extractor/crunchyroll.py55-105 youtube_dl/extractor/vrv.py124-138
提取器通常需要处理地理限制。
使用的技术包括:
来源:youtube_dl/extractor/bbc.py352-356 youtube_dl/extractor/dailymotion.py248-251
提取器处理复杂的媒体格式选择。
常见的格式提取方法
_extract_m3u8_formats() 用于 HLS 流_extract_mpd_formats() 用于 DASH 清单_extract_f4m_formats() 用于 Adobe HTTP Dynamic Streaming来源:youtube_dl/extractor/bbc.py369-454 youtube_dl/extractor/dailymotion.py255-284 youtube_dl/extractor/crunchyroll.py468-574
许多提取器支持字幕提取。
使用的技术包括:
来源: youtube_dl/extractor/bbc.py321-338 youtube_dl/extractor/dailymotion.py287-293 youtube_dl/extractor/crunchyroll.py392-411
Dailymotion 提取器的层次结构
主要功能
来源: youtube_dl/extractor/dailymotion.py22-393
BBC 提取器支持各种 BBC 平台
主要功能
来源: youtube_dl/extractor/bbc.py40-847
Crunchyroll 提取器支持动漫和电视剧内容
主要功能
来源: youtube_dl/extractor/crunchyroll.py40-635
网易云音乐提取器展示了如何处理专业的音乐平台
主要功能
来源: youtube_dl/extractor/neteasemusic.py33-434
VRV 提取器展示了与复杂多媒体平台的集成
主要功能
来源: youtube_dl/extractor/vrv.py25-277
某些提取器需要高级安全处理来处理受保护的内容
供各种提取器用于加密内容
已实现的函数
aes_cbc_decryptaes_ctr_decryptaes_decrypt_text来源: youtube_dl/aes.py49-72 youtube_dl/aes.py201-236 youtube_dl/extractor/crunchyroll.py279-307
通过检查已实现的提取器,可以得出几项最佳实践
_VALID_URL 模式,以避免与其他提取器发生冲突来源: youtube_dl/extractor/bbc.py72-266 youtube_dl/extractor/dailymotion.py103-185