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
相关产品推荐
相关产品推荐

