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

如何修复YouTube Data API分页数据存储:Pandas仅保留最后部分数据

修复YouTube Data API分页数据丢失问题——仅保留最后一页结果的解决办法

问题核心:你的代码每次分页循环都会覆盖res变量,最终只保留了最后一页的搜索结果;后续获取视频详情时也仅处理了最后一页的ID,导致数据不全。以下是具体修复步骤和完整代码:

修复思路

  1. 初始化全局列表存储所有视频ID:避免每次循环覆盖数据,用列表累加每一页的视频ID
  2. 分批处理视频详情请求:YouTube Data API的videos.list接口一次最多支持50个ID查询,需分批处理避免报错
  3. 统一转换为DataFrame:基于所有视频详情数据生成完整的DataFrame

修改后的完整代码

1. 分页获取所有视频ID

api_key = "***"
from googleapiclient.discovery import build

youtube = build('youtube','v3',developerKey = api_key)

# 初始化全局列表存储所有视频ID
all_video_ids = []
nextPageToken = ''
query = "你的搜索关键词"  # 补充你的搜索关键词

for x in range(2):
    request = youtube.search().list(
        q=query,
        part='id',
        maxResults=50,
        order="date",
        pageToken=nextPageToken,
        type='video')
    
    res = request.execute()
    # 提取当前页的视频ID并添加到全局列表
    page_video_ids = [item['id']['videoId'] for item in res['items']]
    all_video_ids.extend(page_video_ids)
    
    # 更新下一页token,若无则提前终止循环
    if 'nextPageToken' in res:
        nextPageToken = res['nextPageToken']
    else:
        break

print(f"共获取到 {len(all_video_ids)} 条视频ID")

2. 分批获取视频详情并转换为DataFrame

import pandas as pd

# 定义分批获取视频详情的函数
def batch_get_video_details(youtube, video_ids):
    all_video_details = []
    # 每50个ID为一批处理
    for i in range(0, len(video_ids), 50):
        batch_ids = video_ids[i:i+50]
        request = youtube.videos().list(
            id=','.join(batch_ids),
            part='snippet'
        )
        response = request.execute()
        all_video_details.extend(response.get('items', []))
    return all_video_details

# 获取所有视频详情
video_details = batch_get_video_details(youtube, all_video_ids)

# 转换为Pandas DataFrame
df = pd.DataFrame([{
    '视频ID': item['id'],
    '频道名称': item['snippet']['channelTitle'],
    '视频标题': item['snippet']['title'],
    '视频描述': item['snippet']['description']
} for item in video_details])

# 查看结果
print(f"DataFrame包含 {len(df)} 条数据")
display(df.head())

关键注意事项

  • 使用list.extend()而非直接赋值:确保每一页的ID都被累加到全局列表中,而非覆盖之前的数据
  • 分批处理视频详情:严格遵守API限制,避免单次请求ID数量超过50导致报错
  • 提前终止循环:当API返回结果中没有nextPageToken时,及时退出循环,减少无效请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:35:25