Python调用YouTube Data API如何传入多个视频ID批量爬取评论
多视频ID批量爬取YouTube评论实现方案
核心说明:YouTube Data API v3 的
commentThreads.list接口单次请求仅支持传入1个视频ID,不支持多ID拼接传参,批量爬取通过遍历视频ID列表逐个发起请求即可实现,对原有单视频爬取逻辑的改造量极小。
完整实现代码
from googleapiclient.discovery import build from googleapiclient.errors import HttpError # 基础配置 api_key = "YOUR_API_KEY" # 所有待爬取的视频ID统一存在列表中,按需追加即可 video_id_list = [ "d56mG7DezGs", "替换为第二个视频ID", "替换为第三个视频ID" ] # 每个视频需要拉取的评论条数,与原有逻辑保持一致 comment_count_per_video = 5 # 初始化API客户端 youtube_client = build('youtube', 'v3', developerKey=api_key) def fetch_single_video_comments(video_id): """封装单视频评论爬取逻辑,返回结构化评论数据""" comment_result = [] try: request = youtube_client.commentThreads().list( part="snippet", videoId=video_id, order="relevance", maxResults=comment_count_per_video ) response = request.execute() # 解析单条评论字段 for item in response["items"]: snippet = item["snippet"]["topLevelComment"]["snippet"] comment_result.append({ "belong_video_id": video_id, "author_name": snippet["authorDisplayName"], "content": snippet["textDisplay"], "like_num": snippet["likeCount"], "publish_time": snippet["publishedAt"] }) return comment_result except HttpError as e: print(f"视频[{video_id}]爬取失败,错误原因:{e.error_details[0]['reason']}") return [] if __name__ == "__main__": all_comments = [] # 遍历所有视频ID逐个爬取 for vid in video_id_list: print(f"正在爬取视频{vid}评论...") video_comments = fetch_single_video_comments(vid) all_comments.extend(video_comments) print(f"视频{vid}爬取完成,共获取{len(video_comments)}条评论") # 按原有格式输出结果 print("\n===== 全部评论爬取结果 =====") for comment in all_comments: print(f"\n所属视频ID: {comment['belong_video_id']}") print(f"Comment By: {comment['author_name']}") print(f"Coment Text: {comment['content']}") print(f"Likes on Comment : {comment['like_num']}") print(f"Comment Date: {comment['publish_time']}") # 原有情感分析逻辑直接追加在这里即可,输出格式与之前完全一致
补充注意事项
- 代码中通过
maxResults参数直接指定接口返回的评论条数,比拉取全量结果后切片更节省API配额,和原有取前N条评论的逻辑完全兼容。 - 新增异常捕获逻辑,遇到视频被删除、评论区关闭、API配额耗尽、私享视频无权限等场景时,会打印错误信息并跳过当前视频,不会中断整个批量爬取任务。
- 爬取结果中增加了所属视频ID字段,避免批量爬取后多视频评论数据混淆。
- 如果需要爬取单个视频的所有评论(而非前N条),只需在单视频爬取函数中增加分页逻辑:判断响应中是否存在
nextPageToken字段,存在则将该字段值传入下一次请求的pageToken参数,循环请求直到返回结果无nextPageToken即可。
内容的提问来源于stack exchange,提问作者Arslan Moosa
相关产品推荐
相关产品推荐

