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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 08:57:37