抖音视频数据怎么采集?用 API 获取视频搜索结果、详情和评论
通过 Just One API 按关键词搜索抖音视频,获取视频详情与评论。包含注册测试、参数说明、searchId 分页和保存 JSON 数据的 Python 示例。
采集抖音视频数据,从哪一步开始?
如果你想了解“露营装备”相关的抖音内容,可以先按关键词搜索视频,再用视频 ID 获取详情和评论。通过 Just One API,这三个步骤分别对应视频搜索、视频详情和视频评论接口,可以使用同一个 API Token 调用。
如果已经知道目标视频 ID,可以直接从详情或评论开始。本文以“关键词搜索 → 视频详情 → 首批评论 → 保存 JSON”为例,完成一个可供后续内容分析的小规模数据采集流程。
这里获取的是视频相关的结构化数据。示例不会下载视频文件,也不涉及抖音电商商品或巨量星图达人营销数据;这些需求有各自的接口。
准备 API Token,先在文档中免费测试
注册 Just One API 账户,获取 API Token 后,打开在线接口文档即可免费试用。一个 Token 可以接入各平台 API,后续按实际调用量付费;具体可测试次数以账户内对应接口显示为准。
先打开 抖音视频搜索 V4,填入 Token 和关键词“露营装备”,从第 1 页开始测试。确认返回体中的业务 code 为 0,再查看 data 中的数据。HTTP 请求成功不一定代表业务调用成功。
本教程使用以下三个接口,均通过 GET 请求调用:
- 视频搜索:
/api/douyin/search-video/v4,必填keyword,用于查找相关视频。 - 视频详情:
/api/douyin/get-video-detail/v2,必填videoId,用于查询指定视频。 - 视频评论:
/api/douyin/get-video-comment/v1,必填awemeId,用于获取指定视频的一级评论。
三个接口还需要传入 token 查询参数。代码中从环境变量读取 Token,不要将真实 Token 写进公开代码或打印包含 Token 的完整请求地址。
第一步:按关键词搜索抖音视频
本例使用 keyword=露营装备、sortType=_0、publishTime=_0、duration=_0 和 page=1,即综合排序,不限制发布时间和时长。按需调整筛选条件即可用于其他话题。
sortType:_0为综合,_1为点赞最多,_2为最新。publishTime:_0为不限,_1为最近 24 小时,_7为最近 7 天,_180为最近 6 个月。duration:_0为不限,_1为 1 分钟以内,_2为 1–5 分钟,_3为超过 5 分钟。
当前公开响应样例中,普通视频卡片位于 data.business_data,其视频 ID 位于卡片的 data.aweme_info.aweme_id。搜索结果可能包含其他类型的卡片,因此不要把每张卡片都直接当作视频;示例只处理带有这个视频 ID 的卡片。
搜索翻页需要同时传 page 和 searchId
第 1 页可以不传 searchId。从第 2 页开始,除递增 page 外,还要将上一页响应的 data.business_config.next_page.search_id 作为本次请求的 searchId。
当 data.business_config.has_more 为 0 时停止翻页。同一次搜索翻页时保持关键词和筛选条件不变;更换关键词或筛选条件后,从第 1 页重新开始,不沿用之前的搜索标识。
完整参数见 视频搜索 V4 文档。搜索结果受平台检索范围影响,不能据此声称已经采集到某个话题的全部视频。
第二步:用视频 ID 获取详情
从搜索结果选出视频后,将 aweme_id 作为详情接口的 videoId 传入。同一个 ID 在不同接口中的参数名可能不同,需要以各接口文档为准。
当前 视频详情 V2 的公开响应样例中,视频对象位于 data.aweme_detail,可查看 desc、create_time、author 和 statistics 等字段。下面的代码保留完整响应,方便你核对字段后再整理成业务需要的数据表。
互动指标是请求时返回的数据快照。个别字段可能缺失、为空或不能代表真实总量,不要仅凭字段名称就把某个计数当作完整的播放量或曝光量。
第三步:获取视频评论
调用 视频评论 V1 时,把同一个视频 ID 作为 awemeId 传入,page 从 1 开始。
当前公开响应样例中,评论列表位于 data.comments,评论包含 cid、text、create_time、digg_count 等字段。后续需要更多评论时递增 page,结合返回的 data.has_more 判断是否继续,并设置最大页数。
这个接口的请求参数是页码,不需要传视频搜索的 searchId,也不要把响应中的 cursor 当成该接口的请求参数。本文代码只获取每个视频第 1 页评论。
一级评论与评论下的回复需要分别处理。如需展开楼中楼,使用 抖音评论回复接口。一级评论列表不等于完整评论树。
Python 示例:搜索、查详情并保存首批评论
先安装依赖,再设置环境变量;将 your_token 替换为自己的 Token。下面的命令适用于 macOS 或 Linux 终端。
python3 -m pip install requests
export JUSTONEAPI_TOKEN='your_token'将以下代码保存为 douyin_sample.py,运行 python3 douyin_sample.py。示例最多请求 2 页搜索结果,再对最多 3 个去重后的视频分别请求详情和第 1 页评论,总计最多 8 次 API 请求。提前遇到结束标识或错误时,请求数会更少。
这几个数量是示例的采集上限,不是平台额度。代码依据当前文档和公开响应样例编写;实际结果以运行时返回为准。
import json
import os
from datetime import datetime, timezone
from pathlib import Path
import requests
BASE_URL = "https://api.justoneapi.com"
TOKEN = os.environ.get("JUSTONEAPI_TOKEN", "")
KEYWORD = "露营装备"
MAX_SEARCH_PAGES = 2
MAX_VIDEOS = 3
def call_api(path, **params):
try:
response = requests.get(
BASE_URL + path,
params={"token": TOKEN, **params},
timeout=120,
)
except requests.RequestException:
raise RuntimeError("Network error or timeout") from None
if response.status_code != 200:
raise RuntimeError(f"HTTP {response.status_code}")
try:
result = response.json()
except ValueError:
raise RuntimeError("Response is not valid JSON") from None
if not isinstance(result, dict) or result.get("code") != 0:
code = result.get("code") if isinstance(result, dict) else None
raise RuntimeError(f"API failed: code={code}; check the docs")
if not isinstance(result.get("data"), dict):
raise RuntimeError("Unexpected data shape; check the response")
return result
def save_json(folder, name, result):
(folder / name).write_text(
json.dumps(result, ensure_ascii=False, indent=2),
encoding="utf-8",
)
def main():
if not TOKEN or TOKEN == "your_token":
raise RuntimeError("Set JUSTONEAPI_TOKEN before running")
run_id = datetime.now(timezone.utc).strftime("%Y%m%dT%H%M%S%fZ")
folder = Path("douyin-output") / run_id
folder.mkdir(parents=True, exist_ok=False)
video_ids = []
seen = set()
search_id = None
for page in range(1, MAX_SEARCH_PAGES + 1):
params = dict(
keyword=KEYWORD, sortType="_0", publishTime="_0",
duration="_0", page=page,
)
if page > 1:
params["searchId"] = search_id
result = call_api("/api/douyin/search-video/v4", **params)
save_json(folder, f"search-{page}.json", result)
data = result["data"]
for card in data.get("business_data") or []:
info = (card.get("data") or {}).get("aweme_info") or {}
video_id = info.get("aweme_id")
if video_id and str(video_id) not in seen:
video_id = str(video_id)
seen.add(video_id)
video_ids.append(video_id)
config = data.get("business_config") or {}
if config.get("has_more") not in (1, "1"):
break
search_id = (config.get("next_page") or {}).get("search_id")
if page < MAX_SEARCH_PAGES and not search_id:
raise RuntimeError("Missing next search_id; inspect saved JSON")
selected = video_ids[:MAX_VIDEOS]
save_json(folder, "selected-video-ids.json", selected)
for index, video_id in enumerate(selected, start=1):
detail = call_api(
"/api/douyin/get-video-detail/v2", videoId=video_id,
)
save_json(folder, f"video-{index}-detail.json", detail)
comments = call_api(
"/api/douyin/get-video-comment/v1", awemeId=video_id, page=1,
)
save_json(folder, f"video-{index}-comments-1.json", comments)
print(f"Saved {len(selected)} video samples to {folder}")
if __name__ == "__main__":
try:
main()
except RuntimeError as error:
raise SystemExit(str(error)) from None脚本会在 douyin-output 下为每次运行新建目录,保存搜索响应、选中的视频 ID、视频详情和首批评论。后续可以从这些 JSON 文件提取字段,再导出 CSV 或写入数据库;保留原始响应便于检查解析结果。
示例按视频 ID 去重后再请求详情。需要连续采集更多评论时,可使用“视频 ID + 评论 cid”作为去重键,并根据实际响应的分页标识停止。未返回的字段应保留为空值,不要将“没有数据”直接解释为数值 0。
调用失败时应该怎么处理?
为了便于第一次调试,示例在调用失败时停止,已保存的成功响应仍留在本次输出目录中。它不会自动重试;再次运行会创建新目录并重新发起请求。
code=0:业务调用成功,可以处理数据。code=301:采集失败,可增加有次数上限的重试。code=302:遇到限制,应降低请求频率,并在有Retry-After时遵循服务端等待时间。code=100、400、600、601、602:先检查 Token、参数、权限、余额或 Token 消费上限,不要循环重试。code=303:每日配额已超限,需要等待配额周期重置。
完整说明见 API 使用指南。准备扩大采集规模时,可继续阅读 失败重试与并发处理,再增加断点续跑、失败记录和有上限的重试。
常见问题
已经有视频 ID,还需要调用搜索吗?
不需要。直接将目标 ID 传入详情接口的 videoId 或评论接口的 awemeId 即可,能减少不必要的搜索请求。如果只有分享链接,可以先查看 分享链接解析接口。
能保证拿到全部视频和全部评论吗?
不能。搜索结果、内容可见性和评论返回范围受平台实际情况影响。本文示例还有明确的页数和视频数量上限,适合验证流程,不能当作全量数据。业务分析时应保留关键词、筛选条件、采集时间和采集范围。
怎么获取某个账号发布的视频?
账号作品列表使用不同的入口。查看 用户发布视频 V1,按 secUid 查询,并使用该接口自己的游标规则翻页,再按需要获取作品详情和评论。
这些接口也可以用于 TikTok 吗?
本文接口针对抖音。TikTok 使用独立的 TikTok API 接口组,请根据目标平台选择,不要直接替换平台名称或混用 ID。
开始你的第一个抖音数据样本
注册 Just One API 获取 API Token,在 抖音视频搜索文档 中免费测试一个关键词。确认搜索、详情和评论的数据符合需求后,再调整采集范围并接入自己的业务流程。一个 Token 接入各平台 API,按实际调用量付费。
继续使用 Just One API
登录 Dashboard 获取 Token,查看完整 API 文档,或打开 MCP GitHub 项目了解最新配置。