Spotify歌单歌曲批量搜索YouTube时出现IndexError索引越界报错
错误原因
IndexError: list index out of range 出现的核心原因是处理第148首歌曲时,VideosSearch 接口返回的 video['result'] 为空列表,没有可访问的元素,直接取下标[0]就会触发越界报错。
常见的触发场景有两类:
- 当前歌曲的名称+歌手+专辑组合关键词太过特殊,YouTube搜索无任何匹配结果返回
- 短时间内连续发起大量搜索请求,被YouTube反爬机制临时拦截,返回空结果集
修复方案
需要给搜索逻辑增加空结果判断、异常捕获,同时添加请求间隔避免触发反爬机制,同时修正你原代码中计数变量的写法错误(count=+ 1 是错误写法,每次只会将count赋值为1,不会累计计数,需要改为count += 1)。
修改后的搜索部分代码如下:
import time # 前面Spotify抓取歌曲列表的代码和你原代码完全一致,无需改动 ############## youtube search ########### with open('songs', encoding='utf-8') as f: lines = f.read().splitlines() success_urls = [] failed_songs = [] count = 0 for line in lines: count += 1 print(f"正在处理第{count}首:{line}") try: videosSearch = VideosSearch(line, limit = 1) video = videosSearch.result() # 先判断搜索结果是否为空 if not video['result']: print(f"第{count}首无匹配搜索结果,已跳过") failed_songs.append(line) time.sleep(2) continue url = video['result'][0]['link'] print(url) success_urls.append(url) except Exception as e: print(f"第{count}首处理出错,错误信息:{e}") failed_songs.append(line) # 统一添加2秒请求间隔,避免触发反爬 time.sleep(2) # 运行结束后输出统计信息 print(f"全部处理完成,成功获取{len(success_urls)}首歌曲的YouTube链接,{len(failed_songs)}首处理失败") if failed_songs: print("处理失败的歌曲列表如下:") for song in failed_songs: print(song)
修改后代码不会中途中断,运行结束后会输出所有失败的歌曲,你可以手动处理这些异常条目。
内容的提问来源于stack exchange,提问作者mohamed zeton
相关产品推荐
相关产品推荐

