问答

怎么导出抖音视频评论做情感分析?

简短回答

用每条视频的 ID 调 okdata 的抖音视频评论接口,顺着游标往下翻;每页约 20 条,$0.002 一次,所以 1,000 条评论需要 50 次调用,共 $0.10。每条评论带内容、点赞、回复数、时间和 IP 属地,可以直接喂给情感模型。

产品团队刚上了一款新手机壳,想知道抖音用户怎么看:夸什么,嘲什么,哪些地区更在意。原材料是相关的 30 条最火视频下的评论区,几千条评论。爬虫常常只抓到视频标题文案,或者翻到一半提示 account blocked。走 API 的话,分三步。

1. 选视频

用抖音视频搜索,sort=most_liked;或者用视频详情把已有的分享链接转成 ID。每条视频的 metrics.comments 能告诉你评论区有多大。

2. 拉评论

抖音视频评论传入视频 id,可选 sort(hot 或 latest)。每条评论有 text 内容、published_at 时间、likes 点赞、replies(楼下回复数)、ip_location(抖音展示的省份)和评论者信息。

3. 打分

先清洗文本,再用情感模型或者给大模型一套固定标签去分类,并按点赞数给每条评论加权:一条有 2,000 个赞的吐槽,代表的人比一条零赞的多得多。

费用

任务 调用次数 费用
找 40 条视频 搜索 2 页 $0.04
30 条视频 × 5 页评论 150 $0.30
任意视频的 1,000 条评论 50 $0.10

脚本

import csv, os, requests

URL = "https://api.okdata.online/v1/douyin/videos/comments/list"
HEAD = {"Authorization": f"Bearer {os.environ['OKDATA_API_KEY']}"}

with open("douyin_comments.csv", "w", newline="", encoding="utf-8-sig") as f:
    w = csv.writer(f)
    w.writerow(["video_id", "published_at", "text", "likes", "replies", "ip_location"])
    for vid in ["7301234567890123456"]:
        params = {"id": vid, "sort": "hot"}
        for _ in range(5):
            body = requests.get(URL, headers=HEAD, params=params, timeout=60).json()
            for c in body["data"]["items"]:
                w.writerow([vid, c["published_at"], c["text"], c["likes"], c["replies"], c["ip_location"]])
            if not body["page"]["has_more"]:
                break
            params["cursor"] = body["page"]["next_cursor"]

打分之前

  • 抖音的表情在文本里是 [捂脸]、[赞] 这样的代码。要么映射成情绪提示,要么去掉,很多模型会读错。
  • 只有一级评论。视频上的评论数把回复也算进去了,所以导出的行数会比显示的少;replies 能告诉你哪几条下面吵得最凶。
  • “哈哈哈”“求链接”这种短评论很多。事先想好,表达购买意向的评论算不算正面。
  • IP 属地是抖音展示的省份,不是精确位置。

其他选择

只有一条视频的话,手动往下刷、复制就行。MediaCrawler 这类工具可以用登录账号把评论和回复一起抓下来。舆情系统能直接给出情感分,但每月费用高得多。连同小红书、微博在内的完整报告做法,见口碑分析方案。

更新于