问答

怎么把 YouTube 视频评论导出成 CSV 或 Excel?

简短回答

用 YouTube 视频评论接口(/v1/youtube/videos/comments/list)逐页拉取,每条评论写一行 CSV:每页约 20 条,$0.004,1,000 条评论共 $0.20。每行有正文、作者、点赞、回复数和日期;用带 BOM 的 UTF-8 保存,Excel 打开表情和中文都不会乱码。

上周发的产品测评视频已经有 3,000 条评论,市场负责人要你明天之前整理成表格,按点赞排好,方便团队给吐槽和功能需求打标签。超过几十条,从网页上复制粘贴就没法干了,写个小脚本几分钟就能搞定。

用哪个接口

YouTube 视频评论传视频 id 和 sort(top 按热门,latest 按最新),每次返回约 20 条,每条带 text、author、likes、replies 和 published_at。把 page.next_cursor 作为 cursor 传回去,直到 page.has_more 为 false。

脚本

import csv, os, requests

API = "https://api.okdata.online/v1/youtube/videos/comments/list"
H = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}
VIDEO = "dQw4w9WgXcQ"   # 链接里 v= 后面那一段
MAX_PAGES = 150         # 约 3,000 条评论

rows, cursor = [], None
for _ in range(MAX_PAGES):
    params = {"id": VIDEO, "sort": "top", **({"cursor": cursor} if cursor else {})}
    body = requests.get(API, headers=H, params=params, timeout=60).json()
    if body["code"] != "ok":
        raise RuntimeError(f"{body['code']}: {body['message']}")
    for c in body["data"]["items"]:
        rows.append([c["id"], c["published_at"], c["author"]["name"], c["likes"], c["replies"], c["text"]])
    if not body["page"]["has_more"]:
        break
    cursor = body["page"]["next_cursor"]

with open(f"{VIDEO}-comments.csv", "w", newline="", encoding="utf-8-sig") as f:
    w = csv.writer(f)
    w.writerow(["comment_id", "published_at", "author", "likes", "replies", "text"])
    w.writerows(rows)
print(len(rows), "条评论已保存")

utf-8-sig 会在文件开头写一个 BOM,Excel 靠它才能正确显示表情和中文。评论里的逗号、换行,csv 模块会自动加引号处理。

导出之后,在 Excel 里加一列标签,比如吐槽、功能需求、夸奖、提问,按点赞从高到低往下标。点赞多的评论往往代表更多人的看法,先把这一批标完,再决定剩下的要不要细看。

费用

评论量 调用次数 费用
500 条 25 $0.10
1,000 条 50 $0.20
3,000 条 150 $0.60

实际翻了几页就付几页的钱。用 MAX_PAGES 提前停下,账单也就停在那里。

表格里不会有的东西

  • 楼中楼回复。 拿到的是一级评论和它的回复数,回复内容本身没有。
  • 精确的旧日期。 日期有时是从 2 个月前这类标签推算出来的,越早的评论越只能当近似值。
  • 评论者所在地。 YouTube 不显示,这个字段是 null。

其他做法

  • 官方 YouTube Data API。 commentThreads.list 每次只消耗 1 个配额单位,还带部分回复。有 Google key、量又不大的话,它免费,也是更好的选择。
  • youtube-comment-downloader。 开源命令行工具,在你的网络上能跑通的话,导一次很方便;它的 issue 里还有人分享了转成 Excel 的写法。
  • 手工复制。 50 条以内,直接复制粘贴也行。

想大批量读懂评论在说什么,可以看口碑分析方案。

更新于