如何通过YouTube API(Python)提取视频标题
问题解决:YouTube API提取视频标题失败的修复方案
问题背景
开发个人Python应用,基于YouTube API获取视频信息:
- 已实现获取视频评论及回复并导出至Excel的功能
- 尝试提取视频标题时代码无法正常运行,先后参考教程视频、求助教程作者、查阅官方文档均未解决问题
错误代码分析
原代码仅调用commentThreads.list接口获取评论,尝试从该接口返回数据中提取视频标题,存在路径错误或数据获取不完整的问题,示例错误代码如下:
from googleapiclient.discovery import build import pandas as pd API_KEY = "你的API密钥" youtube = build('youtube', 'v3', developerKey=API_KEY) # 仅请求评论相关资源 comment_request = youtube.commentThreads().list( part="snippet,replies", videoId="视频ID", maxResults=100 ) comment_response = comment_request.execute() # 错误:尝试从评论接口数据中提取标题,可能因字段不存在或路径错误报错 video_title = comment_response['items'][0]['snippet']['videoTitle']
修复后的完整代码
通过调用videos.list接口专门获取视频基本信息(含标题),再结合评论接口数据完成导出功能,完整可运行代码如下:
from googleapiclient.discovery import build import pandas as pd def get_youtube_video_info(video_id, api_key): youtube = build('youtube', 'v3', developerKey=api_key) # 获取视频标题等基本信息 video_request = youtube.videos().list( part="snippet", id=video_id ) video_response = video_request.execute() video_title = video_response['items'][0]['snippet']['title'] # 批量获取评论及回复 comments = [] comment_request = youtube.commentThreads().list( part="snippet,replies", videoId=video_id, maxResults=100 ) comment_response = comment_request.execute() while comment_response: for item in comment_response['items']: # 处理主评论 main_comment = item['snippet']['topLevelComment']['snippet'] comments.append({ '视频标题': video_title, '评论作者': main_comment['authorDisplayName'], '评论内容': main_comment['textDisplay'], '发布时间': main_comment['publishedAt'], '回复对象': '' }) # 处理评论回复 if 'replies' in item: for reply in item['replies']['comments']: reply_snippet = reply['snippet'] comments.append({ '视频标题': video_title, '评论作者': reply_snippet['authorDisplayName'], '评论内容': reply_snippet['textDisplay'], '发布时间': reply_snippet['publishedAt'], '回复对象': main_comment['textDisplay'] }) # 分页加载更多评论 if 'nextPageToken' in comment_response: comment_request = youtube.commentThreads().list( part="snippet,replies", videoId=video_id, pageToken=comment_response['nextPageToken'], maxResults=100 ) comment_response = comment_request.execute() else: break # 导出数据到Excel df = pd.DataFrame(comments) output_filename = f'{video_title}_评论数据.xlsx' df.to_excel(output_filename, index=False) print(f"数据已成功导出至 {output_filename}") # 执行示例 if __name__ == "__main__": YOUR_API_KEY = "你的API密钥" TARGET_VIDEO_ID = "目标视频ID" get_youtube_video_info(TARGET_VIDEO_ID, YOUR_API_KEY)
修复说明
- 核心修正:使用
videos.list接口并指定part="snippet",直接获取视频的标题信息,避免从评论接口提取的不确定性 - 功能优化:添加评论分页处理,支持获取超过100条的评论及回复数据
- 数据整合:将视频标题同步到每条评论数据中,导出的Excel表格更完整
内容的提问来源于stack exchange,提问作者Keenonthedaywalker
相关产品推荐
相关产品推荐

