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

如何在YT Data API v3爬取时跳过无videoId的JSON对象

解决YT Data API v3爬取时跳过非视频对象的问题

问题根源

YouTube Search API的search端点默认会返回多种类型的结果(视频、频道、播放列表),哪怕指定了channelId,也可能混入频道类条目——这类条目的id字段只有channelId,没有videoId,直接访问会导致代码抛出KeyError中断。

两种解决方案

方案1:API请求直接过滤视频(推荐)

在请求URL里添加type=video参数,让API只返回视频类型的结果,从源头避免非视频条目:

limit = 5 
video_Ids = []
nextPageToken ="" #for 0th iteration let it be null
for i in range(limit):
    # 添加type=video参数,限定仅返回视频结果
    url = f"https://www.googleapis.com/youtube/v3/search?key={api_key}&part=snippet&channelId={channel_Id}&maxResults=50&pageToken={nextPageToken}&type=video"
    data = json.loads(requests.get(url).text)
    for item in data['items']: 
        video_Id = item['id']['videoId']
        video_Ids.append(video_Id)           
    nextPageToken = data['nextPageToken']

方案2:代码内跳过非视频条目

如果不想修改API请求,就在循环里检查id字典是否包含videoId,不包含则直接跳过:

limit = 5 
video_Ids = []
nextPageToken ="" #for 0th iteration let it be null
for i in range(limit):
    url = f"https://www.googleapis.com/youtube/v3/search?key={api_key}&part=snippet&channelId={channel_Id}&maxResults=50&pageToken={nextPageToken}"
    data = json.loads(requests.get(url).text)
    for item in data['items']: 
        # 检查当前条目是否为视频类型
        if 'videoId' in item['id']:
            video_Id = item['id']['videoId']
            video_Ids.append(video_Id)           
    nextPageToken = data['nextPageToken']

补充说明

方案1更高效,因为API不会返回多余的非视频数据,能减少带宽消耗和后续处理逻辑。如果后续需要同时获取其他类型数据,再用方案2针对性过滤即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 22:30:53