本文档详细介绍了 You-Get 中的通用和嵌入式提取器,它们充当媒体提取的回退机制,以防站点特定提取器不可用。这些组件通过分析 HTML 结构、嵌入式播放器以及网络媒体共有的通用模式来尝试从不支持的网站提取媒体。
有关这些回退机制所补充的基础提取器系统的信息,请参阅 提取器系统 和 VideoExtractor 基类。
来源: src/you_get/extractors/universal.py1-179 src/you_get/extractors/embed.py1-146
通用和嵌入式提取器是扩展 You-Get 功能超越特定支持网站的关键组件。当没有站点特定提取器可以处理给定的 URL 时,它们充当最终的回退。
来源: src/you_get/extractors/universal.py8-179 src/you_get/extractors/embed.py67-141
通用提取器实现在 universal.py 中,提供通用媒体提取功能。它通过内容分析和模式匹配,尝试从任意网站查找和下载媒体内容。
来源: src/you_get/extractors/universal.py8-174 src/you_get/extractors/universal.py67-74
通用提取器采用多种策略来查找网页中的媒体
内容类型分析:
嵌入式媒体检测:
Meta 视频标签:
<meta property="og:video:url" content="..."> 标签HLS 流检测:
.m3u8) URL媒体文件扩展名搜索:
.flv, .mp3, .mp4, .webm 等)图片链接检测:
href 属性<img> 标签MPEG-DASH MPD 检测:
来源: src/you_get/extractors/universal.py25-122 src/you_get/extractors/universal.py67-74
通用提取器使用正则表达式在页面中查找媒体 URL。以下是它查找的主要模式:
| 模式类型 | 目的 | 示例模式 |
|---|---|---|
| 视频文件 | 查找常见的视频格式 | \.flv, \.mp4, \.webm |
| 音频文件 | 查找音频格式 | \.mp3 |
| 高分辨率图片 | 查找可能的媒体图片 | [-_]1\d\d\d\.jpe?g |
| 编码的 URL | 查找 URL 编码的媒体 | https?%3A%2F%2F[^;&"]+\.mp4[^;&"]* |
| 转义的 URL | 查找 JavaScript 转义的 URL | https?:\\\\/\\\\/[^ ;"\'<>]+\.mp4[^ ;"\'<>]* |
| 链接的媒体 | 在链接 href 属性中查找媒体 | href="(https?://[^"]+\.jpe?g)" |
| 相对路径 | 解析相对媒体链接 | href="(\.[^"]+\.png)" |
来源: src/you_get/extractors/universal.py67-113
嵌入式提取器实现在 embed.py 中,专门用于识别来自各种平台的嵌入式媒体播放器。当它找到一个已知的播放器时,它会调用相应的站点特定提取器来处理媒体。
来源: src/you_get/extractors/embed.py67-141
嵌入式提取器使用正则表达式模式识别各种平台的嵌入式播放器
| 平台 | 模式示例 | 备注 |
|---|---|---|
| 优酷 | youku\.com/v_show/id_([a-zA-Z0-9=]+) | 多种模式用于不同的嵌入样式 |
| 土豆 | tudou\.com[a-zA-Z0-9\/\?=\&\.\;]+code=([a-zA-Z0-9_-]+)\& | 匹配播放器 URL 和嵌入代码 |
| 爱奇艺 | player\.video\.qiyi\.com/([^/]+)/[^/]+/[^/]+/[^/]+\.swf[^"]+tvId=(\d+) | 提取播放器 ID 和视频 ID |
| Bilibili | static\.hdslb\.com/miniloader\.swf.*aid=(\d+) | 提取 Bilibili AV ID |
| 网易 | (http://\w+\.163\.com/movie/[^\'"]+) | 匹配完整的视频 URL |
| Vimeo | player\.vimeo\.com/video/(\d+) | 提取视频 ID |
| Dailymotion | www\.dailymotion\.com/embed/video/(\w+) | 提取视频 ID |
| BokeCC | bokecc\.com/flash/pocle/player\.swf\?siteid=(.+?)&vid=(.{32}) | 提取站点 ID 和视频 ID |
来源: src/you_get/extractors/embed.py20-62
嵌入式提取器的一个关键特性是它能够递归地搜索 iframes
embed_download() 直到达到限制(recur_limit = 3)来源: src/you_get/extractors/embed.py122-141
通用和嵌入式提取器作为具有特定关系的备用机制协同工作
来源: src/you_get/extractors/universal.py14-19 src/you_get/extractors/embed.py67-141
NotImplementedError(但仅在顶层,递归过程中不会)来源: src/you_get/extractors/universal.py9-19 src/you_get/extractors/embed.py138-141
通用和嵌入式提取器提供了一个强大的备用机制,极大地扩展了 You-Get 的能力,使其超越了专门支持的网站。它们通过以下方式工作:
这些组件体现了“尝试从任何地方提取”的原则,使 You-Get 更加通用,并且对网站更改具有更强的弹性。虽然不如专门的站点提取器可靠,但它们使得 You-Get 能够处理比其他方式更广泛的网站。
来源: src/you_get/extractors/universal.py1-179 src/you_get/extractors/embed.py1-146