如何改进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'])
改进方案与完整代码
关键修改点
- 第一部分:收集视频ID列表
- 从搜索结果的
items中提取每个视频的id.videoId,存入列表,而非仅打印结果
- 从搜索结果的
- 第二部分:正确传入ID参数
- YouTube Data API的
videos().list接口要求id参数是逗号分隔的视频ID字符串,而非原代码中的错误格式
- YouTube Data API的
改进后完整代码
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
相关产品推荐
相关产品推荐

