使用pytube搜索功能报错KeyError、HTTP 410 Gone问题求助
故障原因
- 所有报错均与你的本地代码无关,属于pytube依赖的YouTube上游接口调整导致:
KeyError: 'twoColumnSearchResultsRenderer'、KeyError: 'onResponseReceivedCommands'是YouTube修改了搜索接口返回的JSON结构,旧版本pytube的解析逻辑适配失效http error 410: gone是YouTube下线了旧版本pytube调用的接口端点
修复方案
1. 优先升级pytube到最新版本
运行终端命令完成升级:pip install --upgrade pytube
这类上游接口变动的问题,pytube维护团队通常会在1-3天内发布补丁修复,升级后即可直接正常运行原有代码。
2. 升级后仍报错的临时修复方法
如果官方尚未发布对应补丁,可手动修改pytube搜索模块源码修复:
- 打开报错提示的search.py文件:
C:\Users\giova\AppData\Local\Programs\Python\Python39\lib\site-packages\pytube\contrib\search.py - 找到
fetch_and_parse方法中的解析逻辑,可先添加print(raw_results)打印完整返回结构,将代码中硬编码的旧键名替换为返回结果中对应的新键名即可。
代码优化建议
你原有代码中通过字符串切割提取视频ID的写法容错率极低,Search.results返回的本身就是YouTube对象列表,可直接读取内置属性,优化后的videoSearch函数如下:
def videoSearch(): userSearch = input("Enter the title of the video you want to search: ") vid = Search(userSearch) availableResults = len(vid.results) print(f"The available results are {str(availableResults)}") for vid_obj in vid.results: vid_link = f"https://www.youtube.com/watch?v={vid_obj.video_id}" print(f"{vid_obj.title} - {vid_link}")
内容的提问来源于stack exchange,提问作者amuchina
相关产品推荐
相关产品推荐

