三分钟跑通抖音直播数据抓取:DouyinLiveWebFetcher WebSocket 原理拆解

发布时间:2026/8/24 3:13:53
三分钟跑通抖音直播数据抓取:DouyinLiveWebFetcher WebSocket 原理拆解 三分钟跑通抖音直播数据抓取DouyinLiveWebFetcher WebSocket 原理拆解【免费下载链接】DouyinLiveWebFetcher抖音直播间网页版的弹幕数据抓取2025最新版本项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher直播运营想知道是哪句话带起了礼物高峰数据分析师想给弹幕做词频统计但数据并不在你直接轮询的接口里而是藏在直播间那条 WebSocket 长连接后面。DouyinLiveWebFetcher 就是为此做的抖音直播数据抓取工具它逆向的是网页版直播间的长连接协议main.py 里三行代码就能收到实时弹幕。它到底能抓到什么这个项目抓的是单个网页版直播间的实时弹幕流覆盖 10 多种消息类型聊天、礼物、点赞、进场、关注、粉丝团入团、房间统计、排行榜、直播间控制等。能力边界要说清楚它只负责直播弹幕实时采集不提供视频流、不查历史回放过去的数据得靠你边跑边落库。终端输出大致长这样【进场msg】[79026102598][男]尘埃 进入了直播间 【礼物msg】X L 送出了 为你点亮x1 【点赞msg】小程๑ 点了9个赞 【统计msg】当前观看人数: 22164, 累计观看人数: 43.6万 【聊天msg】[67197561586]说谎: 去拿 去拿去哪 【粉丝团msg】恭喜 安好 成为粉丝团第289687名成员进场、聊天、统计、礼物几类消息都会陆续打出来这就是抖音弹幕分析的原始素材。 三分钟跑起来git clone https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher cd DouyinLiveWebFetcher pip install -r requirements.txt python main.py依赖就 requests、betterproto、websocket-client、PyExecJS、mini_racer 五个库。main.py 里把 live_id 换成你想看的直播间 ID网页版链接 live.douyin.com/xxx 里的那串数字就能跑。如果走查询直播间状态的流程还需要装一个 Node.js只抓弹幕的话上面四条命令就够。心跳间隔、重连次数、线程数等参数可以在 config.yaml 里调整先试跑的话不用动。 原理速览整条抖音直播数据抓取链路一句话请求拿 room_id → 算签名 → 建 WebSocket 长连接 → 收二进制帧解压后按类型分发。核心就三个文件liveMan.py、sign.js、protobuf/douyin.py逐个拆开看。签名是怎么算的wss 地址不能直连必须带 signature 参数。流程分三步先拿 live_id 请求直播间网页从返回的 HTML 里正则出 roomId再把 wss URL 的 query 参数按固定顺序拼成一行整体算一次 MD5最后把这个摘要交给 sign.js它在 MiniRacer 这个 JS 引擎里执行 get_sign 函数算出的结果追加到 URL 末尾。整个过程是Python 算 MD5 JS 算签名的两段式抖音哪天更新了算法换一份 JS 脚本就行不用动 Python 侧逻辑。长连接怎么保活连接建立后程序会起一个独立线程每 5 秒发一次心跳包就是一个 payload_type 为 hb 的小帧同样走 Protobuf 序列化作用是防止空闲的长连接被服务端掐掉。另外当服务器要求会话确认need_ack时客户端要立刻回一个带原 log_id 的 ack 帧连接才算真正活着。如果连接断开程序会自动查询直播间开播状态还在播就重新走一遍 start() 接上这就是自动重连的完整路径。数据帧怎么拆线上收下来的字节不是文本外面包了两层。外层是 PushFrame解析出 payload 字段后先做 gzip 解压得到一条包含多封消息的 Response。每封消息自带 method 字段WebcastChatMessage 是聊天WebcastGiftMessage 是礼物WebcastRoomUserSeqMessage 是房间统计。liveMan.py 按 method 查表分发给对应的解析函数所以终端里每种消息打印格式才不一样。结构定义全部在 protobuf/douyin.py协议变更时照着 .proto 文件重新生成一遍即可。拿它做什么两个最直接的用法各说两句。弹幕词频看板把聊天消息的文本、用户、时间戳落盘按固定时间窗口做词频统计能看出弹幕话题什么时候转向再结合房间统计消息可以把观看人数曲线和弹幕热度对齐着看。直播间实时告警定几条规则即可比如单发礼物连击超阈值、观看人数骤降、聊天出现敏感词就立刻推通知。消息类型已经按 method 分好类了你只需要在分发那一层加回调不用碰底层协议。遇到问题先看这里连不上 / 签名算出来是空的签名算法跟版本强相关多半是本地 sign.js 过期了重新 clone 最新代码再试。请求直播间页面拿不到 roomId通常直播间没开播或链接失效先用浏览器打开 live.douyin.com/xxx 确认在播再拿这个 ID。消息跑着跑着断了看终端有没有心跳包发送错误心跳线程挂掉后长连接基本就死了重新 start() 接上。Windows 上 gbk 解码报错execjs 调 node 子进程时用了系统默认编码按代码注释的提示把 subprocess 里 Popen 的 encoding 改成 utf-8 即可。某类消息解析不出来大概率是协议结构变了对照检查 protobuf/douyin.py 里的结构体是否同步也可以带着抓到的帧提个 issue。DouyinLiveWebFetcher 是个接上就能出数据的抖音直播数据抓取小工具liveMan.py、sign.js、protobuf/douyin.py 三个文件各几百行是理解 WebSocket 逆向和 Protobuf 直播协议的好入口。仓库地址即文首的 clone 地址欢迎提 issue 或 PR。【免费下载链接】DouyinLiveWebFetcher抖音直播间网页版的弹幕数据抓取2025最新版本项目地址: https://gitcode.com/gh_mirrors/do/DouyinLiveWebFetcher创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考