You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中使用youtube-dl的ytsearch获取视频标题与URL

解决youtube-dl中ytsearch模式无法提取真实视频标题与URL的问题

我刚好看过类似的问题,核心原因是当你使用ytsearch:string进行搜索时,youtube-dl返回的结果并不是单个视频的信息字典,而是一个包含搜索结果列表的顶层字典——真实的视频数据都存在entries这个数组里,你之前直接操作顶层字典自然拿不到正确的标题和URL。

解决方案代码

下面是修改后的完整代码,我会标注关键改动点:

import youtube_dl

ydl_opts = {
    'quiet': True,
    'skip_download': True,
    # 其实这两个参数在搜索模式下不需要,entries里的视频条目会自动包含标题和URL
    # 'forcetitle': True,
    # 'forceurl': True,
}

# --- 关键改动1:提取搜索结果后,从entries数组中取出第一个置顶结果 ---
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    # 加上download=False更明确(和skip_download作用一致,语义更清晰)
    infoSearched = ydl.extract_info("ytsearch:eraser f64", download=False)
    # 取搜索结果中的第一个视频(置顶结果)
    searched_video = infoSearched['entries'][0]

# 输出搜索到的真实标题和URL
print("搜索到的视频信息:")
print(f"标题: {searched_video['title']}")
print(f"真实URL: {searched_video['webpage_url']}")

# --- 原URL测试部分保持不变 ---
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
    infoUrlGiven = ydl.extract_info("https://www.youtube.com/watch?v=pb2fwx4O_Ks", download=False)

print("\n直接URL获取的视频信息:")
print(f"标题: {infoUrlGiven['title']}")
print(f"真实URL: {infoUrlGiven['webpage_url']}")

额外说明

  1. 为什么之前的forcetitle和forceurl没生效?
    这两个参数是针对单个视频提取时的强制输出配置,但搜索模式下的顶层字典不包含这些字段,只有entries数组里的每个视频条目才会携带完整的视频元数据,所以不需要额外配置这两个参数也能拿到标题和URL。

  2. 关于自动播放列表去重的建议
    如果要实现自动添加视频到播放列表并避免重复,推荐用视频的id字段(比如searched_video['id'])来判断,因为每个YouTube视频的id是唯一的,比URL更简洁可靠,也能避免同一视频不同URL格式导致的重复判断问题。

内容的提问来源于stack exchange,提问作者Acalaysia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:45