如果消费者在多个 TikTok 视频中提出同一个问题,支持团队可以整理出相关视频及其表达方式,以便核查。可以先收集多个搜索词的结果,按视频 ID 合并,再将样本交由人工标注。
下面的 Python 脚本会收集返回结果,并生成 CSV,其中包含链接、视频说明,以及每个视频对应的搜索短语。它有助于发现不同搜索结果之间的交集,但本身不会判断问题在语义上是否相似。应由专业人员或单独的分类器作出判断,并进行后续核查。
这项收集要解决什么问题
假设团队销售保温杯,并想了解公开视频中人们会问些什么。搜索“保温杯漏水”可能会找到投诉、评测和教程。搜索“如何清洗保温杯”则会得到另一组结果。多个搜索词可以构成一组工作样本,供支持团队核查和制定内容计划。

脚本生成的结果是一张表格,每条记录都包含帖子 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。密钥从环境变量读取,不会输出。

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