jsonscraper
市场
返回期刊

如何发现 TikTok 上反复出现的产品问题

通过多个搜索词收集公开视频,合并结果,并将找到的表达整理成支持团队或内容团队的待处理队列。

编辑政策 报告错误

如果消费者在多个 TikTok 视频中提出同一个问题,支持团队可以整理出相关视频及其表达方式,以便核查。可以先收集多个搜索词的结果,按视频 ID 合并,再将样本交由人工标注。

下面的 Python 脚本会收集返回结果,并生成 CSV,其中包含链接、视频说明,以及每个视频对应的搜索短语。它有助于发现不同搜索结果之间的交集,但本身不会判断问题在语义上是否相似。应由专业人员或单独的分类器作出判断,并进行后续核查。

这项收集要解决什么问题

假设团队销售保温杯,并想了解公开视频中人们会问些什么。搜索“保温杯漏水”可能会找到投诉、评测和教程。搜索“如何清洗保温杯”则会得到另一组结果。多个搜索词可以构成一组工作样本,供支持团队核查和制定内容计划。

文章:如何发现 TikTok 上反复出现的产品问题
摘要:本文介绍如何使用 TikTok Scraper API 按多个搜索短语获取视频,提取说明文字和链接、去除重复项,并生成用于核查重复问题的样本;缺失的指标不会被错误地替换为零。
图片用途:封面——核心主题
章节:这项收集要解决什么问题
视觉主题:编辑风格静物,一张以纸面形式呈现的公开视频研究实用地图:多个视频链接
публикации的链接有助于核查上下文,并手动归纳已确认的问题。© jsonscraper · AI 生成

脚本生成的结果是一张表格,每条记录都包含帖子 ID、说明、链接,以及该帖子命中的搜索短语列表。同一视频出现在多个搜索结果中,说明这些结果存在交集,但这并不能证明视频里确实有人反复提出同一个问题。要整理问题队列,请打开链接、核查上下文,并为确认过的表达归类主题。

这种流程适合负责自动化收集的开发人员,也适合需要可复现样本进行分析的分析师。保留原视频链接,能让团队在修改说明或准备新内容之前核查结论。

搜索会返回哪些数据

/searchVideo 路由及其参数列在TikTok API 参考文档中。必填参数是 keyword;其他参数包括 count、cursor、region、date_posted、sort_by 和 cache_timeout。请求使用 license_key 参数进行身份验证。下面的示例使用搜索短语和页面大小。

已核实的响应格式包含顶层 status 和 tiktok 对象。条目可能含有 ID、说明、链接、作者信息和统计数据,包括播放量和评论数。某些字段可能缺失,因此 CSV 中对应值会留空,而不会被改成零。

搜索响应支持两种结构:条目可能位于 aweme_list 中,也可能位于 search_item_list[].aweme_info 中。规范化程序会处理这两种格式。代码还会检查 tiktok 对象是否存在,以免把意外的响应格式误认为成功但结果为空。

可直接使用的 Python 收集脚本

示例兼容 Python 3.8+ 和 requests 库。它会针对每个短语发送一次请求,检查 HTTP 响应和 API 状态,按 ID 合并记录,保存命中的搜索短语并写入 CSV。密钥从环境变量读取,不会输出。

文章:如何发现 TikTok 上反复出现的产品问题
摘要:本文介绍如何使用 TikTok Scraper API 按多个搜索短语获取视频,提取说明文字和链接、去除重复项,并生成用于核查重复问题的样本;缺失的指标不会被错误地替换为零。
图片用途:辅助插图 2——另一个具体方面
章节:可直接使用的 Python 收集脚本
视觉主题:俄语信息图,展示经过核实的工作流程:三个关键词查询
示意图展示了搜索响应条目的两种格式,以及将其规范化并写入 CSV 以供人工核查的流程。© jsonscraper · AI 生成插图
import csv
import os
import sys
import requests

BASE_URL = "https://tiktok.evelode.com/searchVideo"
KEY = os.environ.get("JSONSCRAPER_TIKTOK_LICENSE_KEY")
QUERIES = [
    "保温杯漏水",
    "如何清洗保温杯",
    "保温杯不保温",
]

if not KEY:
    sys.exit("请设置 JSONSCRAPER_TIKTOK_LICENSE_KEY")

def extract_items(payload):
    data = payload.get("tiktok")
    if not isinstance(data, dict):
        raise RuntimeError("响应中缺少 tiktok 对象")

    items = list(data.get("aweme_list") or [])
    for entry in data.get("search_item_list") or []:
        video = entry.get("aweme_info") if isinstance(entry, dict) else None
        if isinstance(video, dict):
            items.append(video)
    return items

rows = {}

for query in QUERIES:
    response = requests.get(
        BASE_URL,
        params={"license_key": KEY, "keyword": query, "count": 20},
        timeout=30,
    )
    response.raise_for_status()
    payload = response.json()
    if payload.get("status") != "ok":
        raise RuntimeError("API 返回的状态不是 ok")

    for item in extract_items(payload):
        video_id = item.get("aweme_id")
        if not video_id:
            continue
        stats = item.get("statistics") or {}
        author = item.get("author") or {}
        row = rows.setdefault(video_id, {
            "video_id": video_id,
            "description": item.get("desc"),
            "share_url": item.get("share_url"),
            "author": author.get("nickname"),
            "play_count": stats.get("play_count"),
            "comment_count": stats.get("comment_count"),
            "matched_queries": set(),
        })
        row["matched_queries"].add(query)

fields = ["video_id", "description", "share_url", "author",
          "play_count", "comment_count", "matched_queries"]
with open("tiktok_questions.csv", "w", newline="", encoding="utf-8-sig") as file:
    writer = csv.DictWriter(file, fieldnames=fields)
    writer.writeheader()
    for row in rows.values():
        output = dict(row)
        output["matched_queries"] = " | ".join(sorted(row["matched_queries"]))
        writer.writerow(output)

运行 python -m pip install requests 安装依赖,在进程环境中设置 JSONSCRAPER_TIKTOK_LICENSE_KEY,然后执行脚本。不要将密钥放进源代码、CSV 或日志。若要定时运行,请在任务可访问该环境变量的安全环境中执行脚本。

如何将 CSV 整理成问题队列

收集完成后,打开视频并手动提取实际问题,再将确认过的表达按主题归类,例如“密封性”“保养”或“保温”。搜索短语有助于找到帖子,但视频说明和搜索词之间的重合都不能替代对上下文的核查。

如果使用语言模型,可以将视频说明提供给它,请它给出简短的主题标签和可能的问题。将原文、链接和模型结果一并保存,以便专业人员核查分类依据。如果说明中并没有逐字出现某个问题,不要把模型提出的表达说成原话。

找到的记录数量只反映特定搜索词返回的结果,并不衡量讨论或需求的总体规模。制作内部报告时,请保存运行日期、原始搜索词、ID 和未经处理的 API 响应。这样便于比较后续运行结果,并单独标记新增 ID。

本示例有意不包含自动分页。文档中指出,后续页面使用 cursor 参数;应从上一条响应中获取其值,并原样传递。单个页面只代表实际获取到的一批结果,并非全部搜索结果。

团队将看到什么

tiktok_questions.csv 文件中,每个唯一 ID 对应一行,ID 来自指定的搜索短语。matched_queries 列会显示该视频命中了哪些搜索词。这是筛选不同结果交集、挑选样本进行核查的实用方法;问题分类需要另行完成。

之后,可以将 CSV 纳入每周自动化流程:调度程序启动收集,存储系统保存快照,并在出现日志中尚不存在的新 ID 时发送通知。这属于外部编排逻辑,而非搜索端点的功能。团队获得的是待分析链接队列,而不是关于消费者行为成因的现成结论。

路由参数见API 文档;也可以在TikTok API 演示平台试用请求。开始定期收集前,请核实实际响应格式,并保存从汇总结果跳转到具体视频所需的值。产品介绍见TikTok Scraper API 页面。

最终得到的是一组可核查的视频,并且每条视频都关联到具体搜索表达。它有助于挑选素材进行人工分析,并为纳入内容计划的主题保留来源。

继续阅读如何分析 TikTok 创作者主题:Python 实用流程
阅读下一篇文章

将阅读内容转化为可用的集成

探索 jsonscraper 社交数据 API、测试请求并构建下一个工作流。

查看 API