问答

抖音的 a_bogus 参数是什么?要拿抖音数据一定得自己生成吗?

简短回答

a_bogus 是抖音网页端给接口请求加的签名,由混淆过的 JS 根据请求内容和浏览器信息算出来;签名无效,请求就会失败或返回空。只有自己直接调用抖音网页接口时才需要它:通过 okdata 用 API key 就能拿到同样的公开数据,搜索每页 $0.02,评论每页 $0.002。

在 douyin.com 打开过开发者工具的网络面板,你一定见过它:发往抖音网页接口的每个请求都带一个 a_bogus= 参数,一长串字符,每次都不一样。把请求复制出来,去掉它或者用一个过期的,返回的就是空 body 或者 request params 错误。所以“a_bogus 是怎么生成的”才会成为各个抖音爬虫项目里最常见的问题之一。

它是什么

a_bogus 是请求签名。页面加载的抖音安全脚本是一段高度混淆的 JS,它根据查询参数和请求体、浏览器的 UA 和环境信息以及时间算出这个值。它的前身是 X-Bogus。它和其他几样东西一起出现:msToken、ttwid Cookie,以及 verifyFp/s_v_web_id。服务端会把它们放在一起校验,所以签名对了、Cookie 不对,照样失败。

大家怎么生成它

  1. **直接跑抖音自己的脚本。**把 JS 抠出来放进 Node 执行,Python 里常用 execjs 调用。在能用的时候最准,但脚本一更新,或者缺了某个浏览器对象,就会报错。
  2. **移植算法。**读懂反混淆后的代码,用 Python 或 Go 重写。运行起来快,但算法一变就得重新逆向。
  3. **让真浏览器来签。**用 Playwright 驱动 Chromium,让页面自己发请求。最稳,也最慢最重,而且验证码也会跟着出现。

三种办法有一个共同点:节奏不由你控制。抖音一发新版本,签名器就会失效,直到有人修好为止。

什么时候可以跳过

只有你的代码直接和抖音网页接口打交道时,才需要 a_bogus。如果要的是公开数据,比如搜索结果、视频详情、评论、账号作品,交给一个在自己那边维护签名的 API,问题就没了。用 okdata 时,这些都是普通的 HTTPS 调用:

需求 接口 价格
关键词搜索 视频搜索 每页约 20 条,$0.02
单条视频 视频详情 $0.002
评论 视频评论 每页 $0.002
账号作品 账号作品列表 每页 $0.002

同样的请求,不用签名

curl -G "https://api.okdata.online/v1/douyin/videos/search" \
  -H "Authorization: Bearer $OKDATA_API_KEY" \
  --data-urlencode 'query=露营装备' \
  --data-urlencode 'sort=latest'

如果上游改动真的影响到某个接口,你会收到 upstream_failed,不扣费,并标明可以重试,而不是悄无声息的空列表。详见错误码说明。

什么时候确实需要它

以用户身份做的事,比如点赞、评论、看自己的收藏或私密数据,都需要你自己签名的登录态;目录里没有开放的参数也一样。TikTokDownloader、Douyin_TikTok_Download_API 和 MediaCrawler 这些开源项目对算法变化跟得很紧,想了解最新进展可以去看它们。基于公开数据的调研流程,见内容调研方案。

更新于