如何在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']}")
额外说明
为什么之前的
forcetitle和forceurl没生效?
这两个参数是针对单个视频提取时的强制输出配置,但搜索模式下的顶层字典不包含这些字段,只有entries数组里的每个视频条目才会携带完整的视频元数据,所以不需要额外配置这两个参数也能拿到标题和URL。关于自动播放列表去重的建议
如果要实现自动添加视频到播放列表并避免重复,推荐用视频的id字段(比如searched_video['id'])来判断,因为每个YouTube视频的id是唯一的,比URL更简洁可靠,也能避免同一视频不同URL格式导致的重复判断问题。
内容的提问来源于stack exchange,提问作者Acalaysia
相关产品推荐
相关产品推荐

