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

如何改进YouTube Data API脚本,实现视频ID获取与内容提取?

改进YouTube Data API脚本,实现爬取视频ID并获取视频详情

问题描述

我已使用YouTube Data API编写了一段代码,可从搜索结果中爬取YouTube视频ID。现在需要编写另一部分代码,利用这些ID获取视频描述和频道标题。请问如何改进代码,让脚本的两部分正常运行并返回所需数据?

原代码

第一部分(爬取视频ID)

print(type(youtube))

pp = PrettyPrinter()
nextPageToken = ''

for x in range(1):
#while True:
    request = youtube.search().list(
        q='my unique search query',
        part='id',
#       part='id,snippet',
        maxResults=2,
        order="viewCount",
        pageToken=nextPageToken,
        type='video')
    
    print(type(request))
    res = request.execute()
    pp.pprint(res) 
    
    if 'nextPageToken' in res:
        nextPageToken = res['nextPageToken']
#This code give me relevant ID`s data as the output

第二部分(尝试获取视频详情)

#Here im trying to input ID`s from output results to the ids 
ids = '(type(request.id))'
results = youtube.videos().list(id=ids, part='snippet').execute()
for result in results.get('items', []):
    print(result['id'])
    print(result ['snippet']['description'])
    print(result ['snippet']['title'])

改进方案与完整代码

关键修改点

  1. 第一部分:收集视频ID列表
    • 从搜索结果的items中提取每个视频的id.videoId,存入列表,而非仅打印结果
  2. 第二部分:正确传入ID参数
    • YouTube Data API的videos().list接口要求id参数是逗号分隔的视频ID字符串,而非原代码中的错误格式

改进后完整代码

from pprint import PrettyPrinter

# 请确保已完成YouTube Data API客户端初始化(示例:使用API密钥)
# youtube = build('youtube', 'v3', developerKey='YOUR_API_KEY')

pp = PrettyPrinter()
video_ids = []
nextPageToken = ''

# 第一部分:爬取视频ID(如需多页结果,可将for循环改为while True)
for x in range(1):
    request = youtube.search().list(
        q='my unique search query',
        part='id',
        maxResults=2,
        order="viewCount",
        pageToken=nextPageToken,
        type='video')
    
    res = request.execute()
    # 提取视频ID并添加到列表
    for item in res.get('items', []):
        video_id = item['id']['videoId']
        video_ids.append(video_id)
    
    if 'nextPageToken' in res:
        nextPageToken = res['nextPageToken']
    else:
        break  # 无下一页时终止循环

# 第二部分:利用视频ID获取视频描述和频道标题
if video_ids:
    # 将ID列表转为逗号分隔的字符串
    ids_str = ','.join(video_ids)
    results = youtube.videos().list(id=ids_str, part='snippet').execute()
    
    for result in results.get('items', []):
        print(f"视频ID: {result['id']}")
        print(f"视频标题: {result['snippet']['title']}")
        print(f"频道标题: {result['snippet']['channelTitle']}")
        print(f"视频描述: {result['snippet']['description']}\n")
else:
    print("未获取到任何视频ID")

补充说明

  • 需确保已正确完成youtube客户端的授权配置(如使用API密钥或OAuth2)
  • 若需获取更多搜索结果,可将for x in range(1)改为while True,但需注意API调用配额限制
  • snippet字段包含频道标题、视频标题、描述等所需信息,可直接提取使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 04:54:22