分步指南及获取爬虫代码的入口: tiktok-api.seeksocial.io。
45 亿条 TikTok 视频记录,包含文案、互动数据、音频标识符和时间信息。数据通过 TikTok 移动 API 采集,历时约三周。每个 content_id 恰好出现一次。
据我所知,这是目前规模最大的公开 TikTok 数据集。它按原样发布,供研究使用。
共 27 个 Parquet 文件,采用 zstd 压缩,总大小约 289 GB。每行对应一条视频。
| 字段 | 类型 | 说明 |
|---|---|---|
content_id | uint64 | TikTok 的视频 ID。在整个数据集中唯一 |
create_time | datetime | 视频发布时间 |
desc | string | 文案,即创作者撰写的内容 |
mentions | list[uint64] | 视频中标记的账号 ID |
duration | uint16 | 时长(秒) |
is_video | uint8 | 1 表示视频,0 表示图片帖 |
music_id | uint64 | 使用的音频。跨视频关联键 |
music_title | string | 音频名称 |
views | uint64 | 采集时的播放量 |
likes | uint64 | |
comments | uint64 | 评论数 |
shares | uint64 | |
saves | uint64 | 收藏数。往往是某条内容开始走热的最早信号 |
country | string | 两位字母国家代码 |
language | string | 语言代码 |
is_ad | uint8 | 标记为赞助内容 |
import duckdb
# Query it without loading it. No unpacking, no full download needed.
duckdb.sql("""
SELECT music_id, music_title, count(*) AS videos, sum(views) AS plays
FROM 'videos-*.parquet'
WHERE create_time >= '2025-01-01'
GROUP BY 1, 2 ORDER BY plays DESC LIMIT 20
""").show()import pandas as pd
df = pd.read_parquet("videos-00.parquet", columns=["content_id", "views", "desc"])from datasets import load_dataset
ds = load_dataset("kuben-developer/tiktok-videos-4b", streaming=True)一个文件约 10 GB,包含约 1.67 亿个视频,因此在拉取全部 27 个文件之前,先从一个文件开始。
通过 TikTok Android 应用使用的私有 HTTP API 进行采集,而不是通过 Web 端点或无头浏览器。请求会像应用一样进行签名,并且来自匿名设备注册。整条流程中没有任何登录环节,没有账号,也没有会话 Cookie,因此这里的内容都不属于账号权限限制的内容。
完整方法说明见: https://tiktok-api.seeksocial.io.
这些计数是快照,而非时间序列。 每个互动数值都是该行在约三周采集窗口内某个采集时刻的数值。第一天采集的视频和第二十天采集的视频,积累观看量的时间不同。在没有按视频年龄进行归一化的情况下,不要直接比较相距较远的 create_time 值对应的原始计数。
数据行按创作者分组,未打乱。 导出保留了存储顺序,因此会把每位创作者的视频聚集在一起。如果你要基于这些数据训练,请打乱顺序。顺序读取会形成高度相关的批次。
未包含创作者身份信息。 没有作者 ID、用户名或资料数据。你可以按声音、话题标签提及或视频文案对视频进行分组,但不能按发布者进行分组。这是有意为之。
未包含媒体 URL。 TikTok 的 CDN 链接带有签名过期参数,几天内就会失效,因此提供 539 GB 的链接只会得到 539 GB 的死链。
覆盖范围是样本,而非普查。 这是 32 个存储分区中的 27 个,按创作者 ID 的哈希值划分,因此它是已采集内容的一个无偏随机子集,而不是经过筛选的子集。而已采集的内容本身也并不是 TikTok 的全量内容。
已按 content_id 去重。 源表中约有 10% 的重复行来自重叠的采集批次。这些重复行已合并,每个视频只保留最近一次采集到的版本。
country 和 language 是 TikTok 的标签,由 TikTok 推断得出,并未经过验证。它们的错误率较高,不应将其视为真实基准值。
本数据集仅面向研究和教育用途发布。
字幕由真实人员撰写,无论是否公开发布,该数据集在 GDPR、UK GDPR 和 CCPA 下均属于个人数据。如果您所在的司法辖区适用上述法规,那么从下载之时起,相关义务就由您承担。请勿使用本数据识别、画像、定向或联系个人。
本数据的采集违反了 TikTok 的服务条款。该数据集与 TikTok 或 ByteDance 无关联、未获其认可,亦无任何联系。
如果您被包含在本数据中并希望删除您的相关记录,请在此仓库中开启讨论。