
做抖音搜索数据采集,很多人卡在第一步:接口参数到底怎么传,翻页逻辑怎么接,返回那一堆字段又分别是什么意思。
我最早对接综合搜索的时候,对着文档调了半天,cursor传0能拿到第一页,第二页就开始报错。后来才发现翻页不能靠猜,得用响应里返回的 search_id 和 cursor 接着往下翻。今天把综合搜索接口的对接流程和字段说明完整捋一遍,附上能直接跑的Python示例。
先搞清楚综合搜索到底搜的是什么
抖音的综合搜索,不是只搜视频。用户在搜索框输入一个关键词,默认的“综合”标签页下,会混合展示短视频、图文笔记、商品卡、直播间入口、用户账号等多种类型的内容。
这对采集来说意味着两件事。第一,返回的数据结构不是单一的视频列表,而是多类型内容混排,每一条结果带一个 type 字段来标识类型。第二,综合搜索适合做关键词竞争分析和内容生态洞察——看一个关键词下抖音到底分配了哪些类型的内容,视频多还是商品多,有没有直播入口。如果你只想专注拿视频结果,可以用独立的视频搜索端点,字段更聚焦。
请求参数怎么传
综合搜索的核心参数不算多,但有几个容易踩坑的地方。
keyword 是必填的搜索词。cursor 第一页传0,后续翻页用上一页响应里返回的值。sort_type 控制排序方式,0是综合排序,1是最多点赞,2是最新发布。publish_time 是时间筛选,0不限,1最近一天,7最近一周,180最近半年。filter_duration 按时长筛选,0不限,1是一分钟以内,1-5是1到5分钟,5-10000是5分钟以上。content_type 指定内容类型,0不限,1视频,2图片,3文章。
翻页这里有个关键点。综合搜索的翻页不只靠 cursor,还需要把上一页返回的 search_id 和 backtrace 带上。第一页这两个字段传空字符串就行。不按这个逻辑走,翻到第二页大概率拿不到数据。
Python对接示例
下面是一个完整的请求示例,用 requests 库发POST请求,把参数和翻页逻辑都串起来。
import requests
import json
API_URL = "https://api.example.com/api/v1/douyin/search/fetch_general_search_v2" # 替换为实际端点
API_KEY = "YOUR_API_KEY"
def search_douyin(keyword, cursor=0, search_id="", backtrace="", sort_type="0", publish_time="0"):
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"keyword": keyword,
"cursor": cursor,
"sort_type": sort_type,
"publish_time": publish_time,
"filter_duration": "0",
"content_type": "0",
"search_id": search_id,
"backtrace": backtrace
}
resp = requests.post(API_URL, headers=headers, json=payload, timeout=10)
resp.raise_for_status()
return resp.json()
def crawl_keyword(keyword, max_pages=3):
cursor, search_id, backtrace = 0, "", ""
for page in range(max_pages):
data = search_douyin(keyword, cursor, search_id, backtrace)
# 解析这一页的结果
for item in data.get("data", []):
aweme = item.get("aweme_info")
if aweme:
print(aweme.get("aweme_id"), aweme.get("desc", "")[:30])
# 取下一页参数
next_info = data.get("business_config", {}).get("next_page", {})
if not next_info or data.get("business_config", {}).get("has_more") == 0:
break
cursor = next_info.get("cursor", 0)
search_id = next_info.get("search_id", "")
backtrace = next_info.get("backtrace", "")
print(f"--- 第{page+1}页完成,准备翻页 ---")
if __name__ == "__main__":
crawl_keyword("咖啡", max_pages=2)
这个脚本的核心逻辑是:第一页传 cursor=0 和空的 search_id,拿到响应后从 business_config.next_page 里取下一页的 cursor、search_id 和 backtrace,然后循环往下翻,直到 has_more 变成0为止。
返回字段怎么看
综合搜索返回的 data 是一个列表,里面混着不同类型的内容。视频类型的结果,核心数据在 aweme_info 下面。
aweme_id 是视频的唯一ID,后续调视频详情、评论接口都靠它。desc 是视频描述文案,通常也是标题。author 下面有 uid、nickname、is_verified(是否认证)、region(地区)。statistics 是最关键的互动数据:comment_count 评论数、digg_count 点赞数、share_count 分享数、play_count 播放次数、collect_count 收藏次数。
cha_list 是视频关联的话题标签列表,每个话题带 cha_name 和 share_url。做选题分析或者话题热度追踪的时候,这个字段很有用。
商品类型和直播类型的结果字段不一样,商品会带标题、价格、销量、所属店铺,直播会带直播间相关信息。
如果你不想自己维护请求和翻页逻辑,极致了数据的抖音API覆盖了综合搜索方向,返回结构化JSON,支持批量传入关键词和多并发调用。有技术团队的直接对接,不想写代码的用飞书「多平台数据采集助手」插件,输入关键词就能把搜索结果拉到多维表格,支持定时任务自动更新。

几个容易踩的坑
翻页参数不连续传,第二页大概率空结果。 很多教程只讲 cursor,但综合搜索实际需要 cursor + search_id + backtrace 三个参数一起接。
sort_type 和 publish_time 是组合生效的。 你选了“最新发布”又选了“最近一天”,返回的就是一天内按时间倒序的内容。两个参数的枚举值要对上,传错了不会报错,但结果不是你想要的。
综合搜索返回的类型混排,解析的时候要先判断 type。 不判断类型直接按视频结构去取字段,遇到商品或直播类型的结果会拿不到数据。
常见问题解答
Q1:综合搜索和视频搜索,应该用哪个?
看你的目的。想看一个关键词下抖音分配了哪些类型的内容,用综合搜索。只想拿视频列表做内容分析,用视频搜索,字段更聚焦、解析更简单。
Q2:翻页到底怎么接才不会断?
第一页 cursor=0,search_id 和 backtrace 传空字符串。之后每一页都用上一页响应里 business_config.next_page 返回的值。has_more 变成0就停止翻页。
Q3:没有技术团队,能对接综合搜索吗?
能。用极致了数据的飞书「多平台数据采集助手」插件,零代码配置,输入关键词就能把综合搜索结果采集到多维表格,不需要自己处理请求和翻页逻辑。
总结
抖音综合搜索接口的对接,核心是三件事:参数里 cursor、search_id、backtrace 三个翻页字段要连贯传递,sort_type 和 publish_time 的枚举值要对上,返回结果里 aweme_info 和 statistics 是视频类型的核心数据所在。极致了数据的抖音API覆盖综合搜索方向,支持批量关键词和多并发调用,返回结构化JSON,可通过API对接或飞书插件零代码接入。先把翻页逻辑跑通,再把字段拆明白,综合搜索的数据就能稳定拉回来了。
