每天早上8点,我的飞书会准时收到一条消息,告诉我昨天的数据变化。这不是某个SaaS工具,而是我自己搭的一套自动化系统。
一、痛点:手工统计太痛苦
做抖音内容快两个月的时候,我遇到了一个尴尬的问题:我不知道自己做得怎么样。
每次想复盘,我得:
- 打开抖音创作者中心
- 一条条截图保存数据
- 把数字填到Excel里
- 手动计算环比、增长率
一条视频还好,27条视频就崩溃了。更可怕的是,我无法追踪数据变化趋势——今天的播放量是比昨天高了还是低了?粉丝增长曲线长什么样?哪些内容类型效果最好?
手动统计的问题:
- 耗时:每次20-30分钟
- 易错:抄错数字、漏掉视频
- 无法追溯:昨天是什么数据?不知道
- 没有洞察:纯数字,看不出规律
二、目标:全自动数据监控
我决定搭建一套自动化系统,目标是:
- 定时抓取:每天自动获取最新数据
- 持久存储:所有数据入库,可追溯
- 自动分析:计算增长、识别爆款
- 推送报告:生成周报,推送到飞书
理想的工作流:
凌晨2点 → 系统自动抓取数据 → 写入数据库 → 生成报告 → 早上8点推送到飞书
我只需要 → 阅读报告 → 根据洞察调整策略
三、技术方案
架构设计
┌─────────────────┐ ┌──────────────┐ ┌─────────────┐
│ Cron 定时任务 │────▶│ Playwright │────▶│ 抖音页面 │
│ (每天 2:00) │ │ 浏览器自动化 │ │ 数据提取 │
└─────────────────┘ └──────────────┘ └─────────────┘
│
▼
┌──────────────┐
│ SQLite 数据库│
│ douyin_works │
└──────────────┘
工具选型
| 组件 | 选择 | 理由 |
|---|---|---|
| 浏览器自动化 | Playwright | 比Selenium稳定,支持现代Web特性 |
| 数据库 | SQLite | 轻量、零配置、Python原生支持 |
| 定时任务 | OpenClaw Cron | 与现有系统集成,无需额外服务 |
| 报告推送 | 飞书群机器人 | 团队已在用,触达效率高 |
核心挑战:如何抓取抖音数据?
抖音没有公开API,只能从网页端抓取。通过分析页面结构,我发现抖音使用 data-e2e 属性标记关键数据:
// 点赞数
document.querySelector('[data-e2e="video-player-digg"]').textContent
// 评论数
document.querySelector('[data-e2e="feed-comment-icon"]').textContent
// 收藏数
document.querySelector('[data-e2e="video-player-collect"]').textContent
// 分享数
document.querySelector('[data-e2e="video-player-share"]').textContent
这种标记方式相对稳定,不容易因为UI改版而失效。
四、实现过程
Step 1: 数据库设计
CREATE TABLE works (
id INTEGER PRIMARY KEY,
work_id TEXT UNIQUE,
title TEXT,
url TEXT,
publish_date DATE,
likes INTEGER DEFAULT 0,
comments INTEGER DEFAULT 0,
shares INTEGER DEFAULT 0,
collects INTEGER DEFAULT 0,
views INTEGER DEFAULT 0,
created_at TIMESTAMP,
updated_at TIMESTAMP,
last_crawled_at TIMESTAMP
);
CREATE TABLE account_metrics (
id INTEGER PRIMARY KEY,
date DATE DEFAULT CURRENT_DATE,
followers INTEGER DEFAULT 0,
total_likes INTEGER DEFAULT 0,
total_works INTEGER DEFAULT 0,
crawled_at TIMESTAMP
);
Step 2: 数据抓取脚本
核心逻辑:
- 启动 Playwright,打开抖音创作者页面
- 滚动加载所有作品
- 提取每个作品的互动数据
- 存入数据库(新作品插入,已有作品更新)
async def crawl_douyin_data(page):
# 等待页面加载
await page.goto("https://creator.douyin.com/")
await page.wait_for_load_state("networkidle")
# 提取账号数据
body_text = await page.inner_text('body')
followers_match = re.search(r'粉丝(\d+)', body_text)
followers = int(followers_match.group(1)) if followers_match else 0
# 滚动加载所有作品
works = []
for _ in range(10): # 最多滚动10次
await page.mouse.wheel(0, 1000)
await asyncio.sleep(0.5)
# 提取每个作品数据
work_elements = await page.query_selector_all('[data-e2e="video-card"]')
for element in work_elements:
title = await element.get_attribute('title') or ''
likes = await extract_count(element, '[data-e2e="video-player-digg"]')
comments = await extract_count(element, '[data-e2e="feed-comment-icon"]')
# ... 其他字段
works.append({
'title': title,
'likes': likes,
'comments': comments,
# ...
})
return works, followers
Step 3: 反爬策略
抖音有反爬机制,我采取了以下策略:
- 随机延迟:批次间 3-5 秒随机延迟,模拟人类操作
- 分批处理:每批处理5个作品,避免一次性请求过多
- 页面隔离:每个作品使用独立 page,减少关联
- 超时处理:10秒元素等待 + 5秒保底延迟
Step 4: 定时任务配置
在 OpenClaw 中配置 Cron:
{
"name": "抖音数据自动更新",
"schedule": "0 2 * * *",
"timezone": "Asia/Shanghai",
"agentId": "main",
"prompt": "执行抖音数据抓取任务..."
}
Step 5: 周报自动生成
每周一凌晨,系统会:
- 查询过去7天的数据
- 计算关键指标变化
- 识别 TOP 3 爆款
- 分析爆款特征
- 生成选题建议
爆款因子分析逻辑:
- 标题关键词提取(“AI”、“选品”、数字等)
- 内容类型分类(结果导向型、揭秘型、工具型)
- 互动率计算(收藏率高的作品往往实用价值高)
五、成果展示
当前数据概览
| 指标 | 数值 |
|---|---|
| 总作品数 | 27 |
| 总播放量 | 358,065 |
| 总点赞 | 5,784 |
| 总评论 | 810 |
| 总收藏 | 7,741 |
| 总分享 | 717 |
| 粉丝数 | 1,969 |
TOP 3 爆款作品
- 爆款别硬测,AI两天帮我砍坑 - 128,000播放,1,729点赞,1,409收藏
- AI扛KPI后,我们团队每天在干嘛?揭秘 - 105,000播放,1,060点赞,868收藏
- 我不再盯数据,全靠AI自动跑 - 42,000播放,263点赞,125收藏
关键发现
通过数据分析,我发现:
- 标题带数字的完播率更高(“2天”、“10分钟”、“80%”)
- 教程类内容收藏率极高(收藏 > 点赞的50%),说明实用价值被认可
- “AI+电商效率/结果”主题最容易爆
- 发布时间:工作日晚上8-10点数据最好
系统稳定性
运行一个多月,系统表现:
- ✅ 抓取成功率:100%
- ✅ 零人工干预:定时自动运行
- ✅ 数据完整性:所有作品数据可追溯
- ✅ 报告准时率:每天8点前推送
六、经验总结
做得好的
- 技术选型合理:Playwright + SQLite 足够轻量,不需要重型架构
- 数据持久化:所有原始数据入库,支持追溯和深度分析
- 自动化闭环:抓取→存储→分析→推送,全流程自动化
- 洞察驱动内容:基于数据发现爆款规律,指导选题
可以改进的
- 异常处理:抖音页面改版时需要人工调整选择器
- 数据可视化:目前是文本报告,可以加上图表
- A/B测试:可以测试不同发布时间、标题风格的效果
- 多平台扩展:小红书、B站也可以用类似方案
给想搭建类似系统的人
如果你也想搭一套自己的数据监控系统:
- 先跑通MVP:不要追求完美,先让数据能自动抓下来
- 重视反爬:不要频繁请求,控制好节奏
- 数据入库:不要只存最新数据,历史数据很有价值
- 从洞察出发:不是为了数据而数据,要能指导行动
七、写在最后
这套系统帮我省了每周2-3小时的统计时间,更重要的是,让我能基于数据做决策,而不是凭感觉。
现在每天早上8点,我都会收到这样一条消息:
📊 抖音数据日报 昨日更新:1条新作品 粉丝变化:+5 获赞变化:+127 TOP作品:AI选品SOP:10步自动化(播放3,240)
这种”被数据推动”的感觉,挺好的。
如果你对这个系统感兴趣,或者想搭建类似的数据监控方案,欢迎在评论区交流。