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

Python中用yt-dlp获取YouTube搜索前5条结果的实现方法

用yt-dlp在Python中批量获取YouTube搜索结果(替代youtube_search+yt-dlp组合)

你可以直接通过yt-dlp的ytsearchN:语法(N为需要返回的结果数量)在Python中批量获取搜索结果,省去单独调用youtube_search的步骤,减少网络请求耗时。以下是修改后的代码,支持返回指定数量的搜索结果,同时保留处理直接视频URL的逻辑:

from requests import get
import yt_dlp  # 使用活跃维护的yt-dlp库,替代旧版youtube_dl

YDL_OPTIONS = {
    'format': 'bestaudio',
    'noplaylist': 'True',
    'quiet': True,  # 关闭冗余日志输出,适配机器人场景
    'extract_flat': False  # 确保提取完整的音频直链信息
}

def search_youtube(arg, num_results=5):
    with yt_dlp.YoutubeDL(YDL_OPTIONS) as ydl:
        try:
            # 尝试判断输入是否为有效URL
            get(arg)
        except:
            # 非URL时,用ytsearchN语法获取指定数量的搜索结果
            search_results = ydl.extract_info(f"ytsearch{num_results}:{arg}", download=False)
            videos = search_results['entries']
        else:
            # 是URL时,直接提取该视频信息,包装为列表保持格式统一
            video = ydl.extract_info(arg, download=False)
            videos = [video]
    
    # 过滤无效空条目
    return [vid for vid in videos if vid is not None]

使用示例

调用函数后,可遍历结果列表提取Discord机器人所需信息:

# 搜索关键词"hello",获取前5条结果
results = search_youtube("hello", num_results=5)

for idx, video in enumerate(results, 1):
    print(f"第{idx}条结果:")
    print(f"标题: {video['title']}")
    print(f"上传者: {video['uploader']}")
    print(f"音频链接: {video['url']}")
    print("---")

关键说明

  • 替换旧版youtube_dl为yt_dlp:后者是youtube-dl的活跃分支,支持更多特性且维护及时
  • 用ytsearch{num_results}:{arg}语法直接让yt-dlp执行搜索,一次性获取指定数量结果,避免两次网络请求
  • 保留原逻辑中对直接URL的支持,返回结果统一为列表格式,方便后续处理
  • 添加quiet: True避免日志干扰机器人运行,extract_flat: False确保能获取完整音频直链

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 03:45:40