涵盖系统架构、所有 CLI 命令行指令、Laravel RESTful API 规范、短剧算法指标及 MySQL 数据字典
本系统采用 “业务与中枢管理(Laravel 10 + MySQL) $\longleftrightarrow$ 分布式采集引擎(Python + DouYin_Spider)” 的解耦架构。彻底摒弃了 Redis 强依赖,所有任务调度、并发锁及增量对比完全由 MySQL 轻量状态机接管。
| 架构分层 | 核心组件与位置 | 职责说明 |
|---|---|---|
| 管理中枢与视图 | C:\wamp64\www\app (Laravel 10) |
提供 AdminLTE 3 后台、批量导入多行链接、大盘指标看板、历史增长折线图、Excel 导出 |
| 调度与内部 API | /api/v1/crawler/* |
基于 MySQL crawl_status + next_crawl_at 进行原子锁任务派发,接收 Python 数据回传 |
| 数据采集 Worker | D:\code\duanju\worker.py |
常驻守护进程或计划任务,循环拉取任务、执行抖音 Web 抓取、解析短剧标签并回传入库 |
| 单号深度分析器 | D:\code\duanju\spider.py |
面向单个账号的独立深度分析与 Excel/Markdown 研报导出工具 |
| 底层逆向轮子 | D:\code\duanju\DouYin_Spider |
封装纯 Python 版 a_bogus 签名、DouyinAuth 凭证会话与官方 API |
在 D:\code\duanju 目录下执行,负责从 Laravel 自动认领上百到上千个账号进行批量抓取:
| 参数 | 默认值 | 功能说明 |
|---|---|---|
--refresh-video ID | None | 单视频精准单查:指定单条视频 ID 或链接,秒级精准拉取最新点赞/收藏并入库 |
--once | False | 跑完当前所有待采账号后自动退出(适合手动触发或加入 Windows 计划任务) |
--force | False | 强制忽略计划调度时间,把库中所有账号立即重新抓取一遍 |
--full | False | 作品ID直查刷新模式:直接提取库中已收录的作品 ID 单点直查,不走长游标翻页,彻底解决深层翻页卡死与旧视频漏刷问题 |
--video-delay N | 2.5 | 单视频直查时的基准休眠秒数(带拟人化随机波动,防风控) |
--account-delay N | 4.0 | 账号与账号之间的基准休眠秒数(带拟人化随机波动) |
--reset-all | False | 调用 API 一键将数据库中所有账号的下次抓取时间清零,全部恢复待抓取 |
--max-works N | 30 | 每个创作者最多处理的作品条数(与 --full 联用可限制刷新最新的前 N 条已入库作品) |
--batch-size N | 10 | 单次从 Laravel 认领的账号任务个数 |
--api-base URL | http://localhost/api/v1/crawler | Laravel API 服务端地址 |
--interval N | 10 | 队列暂无任务时的轮询休眠秒数(常驻模式下生效) |
独立分析某个特定抖音账号,并在终端输出控制台看板、生成 Excel 及 Markdown 研报:
/api/v1/crawler/tasks
—— 采集器拉取待抓取任务(加锁防并发)
从 MySQL 查询当前已到期(next_crawl_at <= NOW())且状态为 idle 的账号,并在事务中原子置为 running,防止多个 Worker 重复采集。
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
limit | integer | 否 | 本次拉取最大数量(默认 10,上限 100) |
worker_id | string | 否 | 采集节点标识,如 worker-1 |
force | boolean | 否 | 传 1 时忽略计划时间,强制认领全部账号 |
/api/v1/crawler/sync-data
—— 采集数据回传与批量 Upsert 入库
Python 采集完成后回传,服务端自动更新账号画像、生成每日增长快照、对视频表以 aweme_id 做 Upsert,记录单视频增量流水,并顺延下一次抓取时间。
/api/v1/crawler/report-error
—— 采集异常上报与熔断
当触发反爬风控、验证码或 Cookie 失效时调用,将账号置为 failed 状态,并记录在爬虫流水日志中。
本系统内置完整的 MCP (Model Context Protocol) 协议服务端 (mcp_server.py),支持线上远程网络 SSE (Server-Sent Events) 长连接传输,以及本地 stdio 管道直连。大模型(如 Claude Desktop / Cursor / Dify 等)可直接通过自然语言调用爬虫执行抓取、查询指标、以及自动生成并推送研报。
| 工具名称 (Tool) | 类型 | 核心功能 | 适用对话场景 |
|---|---|---|---|
get_market_overview | 只读查询 | 调取当前大盘账号总数、视频总数、三剧种占比分布与平均收藏率 | “分析一下当前大盘整体情况”、“AI短剧占比多少” |
get_top_viral_videos | 只读查询 | 获取爆款视频榜单(支持按点赞、追剧收藏率、争议评论率排序) | “挑出最近收藏率最高的3个AI短剧”、“今天点赞最高的有哪些” |
get_series_cliff_analysis | 只读查询 | 查询指定短剧的留存衰减瀑布与系统推定的付费卡点集数诊断 | “分析《督军府大小姐》在哪一集出现断崖”、“付费卡点设在第几集” |
get_account_growth_trend | 只读查询 | 调取指定创作者的历史每日粉丝与点赞增量流水 | “看一下‘月光剧场’这几天的吸粉涨赞走势” |
add_and_crawl_account | 写操作 | 输入抖音主页链接,自动提取 sec_uid 录入数据库并立即触发抓取 | “帮我监控这个新短剧账号:https://www.douyin.com/user/...” |
refresh_single_video | 写操作 | 指定单条视频 ID 或链接,秒级精准刷新最新点赞/收藏并入库 | “刷新一下 7687929167865777444 这个视频的点赞” |
reset_all_crawler_tasks | 写操作 | 一键清空全盘账号的计划时间,全部设为就绪(从头重跑) | “把所有账号调度重置,准备重抓” |
send_notification_briefing | 消息推送 | 将生成的分析 Markdown 研报推送到飞书、企业微信或钉钉群机器人 | “把刚才的分析结果生成简报发到我的飞书群” |
| 配置文件 | 存放路径 | 功能说明 |
|---|---|---|
deploy.sh | 项目根目录 | Ubuntu 22.04 一键自动部署脚本(自动安装 PHP8.2, Nginx, Python3, MCP依赖, 迁移数据库) |
nginx_httpadd.conf | 项目根目录 | Nginx 生产配置,支持 HTTPS,将 Web/API 分流给 PHP-FPM,将 /sse 分流给 Python MCP |
supervisor/mcp-server.conf | supervisor/ | Supervisor 进程守护:确保 Python MCP 服务(端口 8080)7x24小时常驻运行,崩溃秒级自启 |
supervisor/douyin-worker.conf | supervisor/ | Supervisor 进程守护:确保 Python 采集 Worker 全天候按优先级巡检 300+ 账号更新 |
| 指标名称 | 计算公式 | 行业基准区间 | 短剧业务商业价值与诊断含义 |
|---|---|---|---|
| 1. 赞粉比 (Likes / Fans) |
总获赞量 / max(粉丝量, 1) |
常规:3 ~ 8 极高:> 12 |
衡量账号内容吸粉能级。若赞粉比极高但粉丝少,说明爆款多但用户大多“只点赞不关注”,需优化账号主页置顶合集与主页引流钩子。 |
| 2. 追剧收藏率 (Collect Rate) |
收藏数 / max(点赞数, 1) |
普通:5% ~ 10% 高黏性:> 15% 爆款钩子:> 25% |
短剧最核心的“存留书签”指标!用户点击收藏代表强烈期待接续观看后续剧集。当某集收藏率激增,说明该集正是绝佳付费卡点或小程序承接集。 |
| 3. 深度评论率 (Comment Rate) |
评论数 / max(点赞数, 1) |
常规:3% ~ 6% 高争议:> 8% |
反映剧情冲突拉扯感与话题讨论度。真人爽剧的“打脸亮明身份”集,或 AI 短剧的“画风技术评价”通常出现评论率高峰。 |
| 4. 裂变分享率 (Share Rate) |
分享数 / max(点赞数, 1) |
常规:1% ~ 2% 高传播:> 5% |
反映社交货币价值(用户自发转发至群聊/私信)。多见于极度猎奇、高设定反差、或超现实 AI 短剧内容。 |
| 5. 付费断崖卡点 (Paywall Cliff) |
(前集点赞 - 当集点赞) / 前集点赞 |
断崖阈值:≥ 50% ~ 70% | 逆向推算竞品的小程序引导断点。例如第 10 集点赞 9.6 万,第 11 集骤降至 7800(跌幅 -91.9%),系统自动断定第 10 集为免费引流卡点集。 |
sec_uid (VARCHAR 150, UNIQUE):抖音账号全局唯一加密标识nickname, unique_id, avatar, signature:账号展示属性follower_count, total_favorited, aweme_count:最新大盘指标primary_drama_type:AI剧 / 漫剧 / 真人剧 / 其他priority:S 级 (2h)、A 级 (6h)、B 级 (12h)、C 级 (24h)crawl_status:idle (就绪) / running (采集中) / failed (失败)next_crawl_at:调度时间戳索引(替代 Redis 任务池)aweme_id (VARCHAR 64, UNIQUE):作品全局唯一 ID (防重核心)drama_type, drama_title, episode, hooks:短剧语义提取digg_count, comment_count, collect_count, share_count:互动数据comment_rate, collect_rate, share_rate:互动衍生比率video_cover, video_addr, published_at:媒体源地址与时间account_id, snapshot_date (联合唯一索引)follower_delta:较昨日净增粉丝数favorited_delta:较昨日净增点赞数video_id, recorded_at:每次 Worker 抓取记录一个时间点digg_delta:两次抓取之间的点赞净增突跃量collect_delta:追剧收藏净增突跃量--force 参数:python worker.py --once --force --max-works 30
aweme_id 作为主键唯一索引进行 updateOrCreate。已有视频只会刷新点赞、收藏等最新数值,并追加一条历史时间快照用于绘制折线图,绝不产生重复记录。
www.douyin.com 并登录个人账号;/aweme/v1/web/ 开头的请求;UIFID=... 字段);D:\code\duanju\.env 和 C:\wamp64\www\app\.env 的 DY_COOKIES='...' 中保存即可。
worker.py 已经内置了 2.0 ~ 3.5 秒 的随机抖动休眠;建议单机单进程运行,批次大小保持在 10~20 个账号,既能稳定在半小时内刷完 300 多个账号,又能完全规避 IP 封禁与滑块验证。