
在短视频直播行业高速发展的今天,抖音直播间弹幕不仅是用户互动的核心载体,更是蕴含用户需求、舆情反馈、热点话题的宝贵数据资源。对于运营人员、数据分析师及开发者而言,实时监控直播间弹幕并提取核心关键词,能够快速掌握用户关注点、分析直播舆情、优化直播内容,甚至实现商业线索挖掘。
本文将基于 Python 技术栈,从零实现抖音直播间弹幕实时抓取、数据持久化存储、高频关键词提取三大核心功能,全程提供可直接运行的代码与详细解析,解决抖音直播数据采集的技术难点,兼顾实用性与可扩展性。
抖音直播间弹幕数据并非通过传统 HTTP 接口传输,而是基于WebSocket 长连接实现实时推送,这是实现弹幕抓取的核心关键点。同时,为了保证数据的可读性与分析效率,我们采用以下技术组合:
在开始编码前,需要安装项目所需的第三方库,打开终端执行以下命令:
bash
运行
# WebSocket客户端库
pip install websockets
# 中文分词与关键词提取
pip install jieba
# 数据处理与存储
pip install pandas
# 协程异步处理
pip install asyncio本项目分为四大模块:直播间参数获取、WebSocket 连接与数据接收、弹幕数据解析与存储、关键词实时提取。整体采用异步协程架构,保证弹幕接收的实时性,不丢失数据。
在运行代码前,需要获取目标直播间的room_id(直播间 ID),这是连接弹幕服务器的核心参数:
room_id=后面的数字即为直播间 ID。以下是可直接运行的完整代码,包含注释解析,适配最新抖音直播协议:
python
运行
import asyncio
import websockets
import json
import jieba
from collections import Counter
import pandas as pd
import time
from datetime import datetime
# 全局配置
ROOM_ID = "你的直播间ID" # 替换为目标直播间ID
SAVE_PATH = "douyin_danmu.csv" # 弹幕保存路径
KEYWORD_TOP_N = 10 # 提取前10个高频关键词
# 停用词列表(过滤无意义词汇)
STOP_WORDS = {"的", "了", "是", "我", "你", "在", "吗", "吧", "啊", "哦", "呀", "这个", "那个"}
# 存储实时弹幕数据
danmu_data = []
def save_danmu_to_csv(data):
"""将弹幕数据保存到CSV文件"""
df = pd.DataFrame(data)
df.to_csv(SAVE_PATH, mode="a", index=False, header=not pd.io.common.path_exists(SAVE_PATH))
def extract_keywords(content_list):
"""
对弹幕内容进行分词并提取高频关键词
:param content_list: 弹幕内容列表
:return: 高频关键词及词频
"""
words = []
for content in content_list:
# 精确模式分词
seg_list = jieba.lcut(content.strip())
# 过滤停用词、空字符、单字符
for word in seg_list:
if word not in STOP_WORDS and len(word) > 1 and word.strip():
words.append(word)
# 统计词频并取TOP N
word_counter = Counter(words)
top_keywords = word_counter.most_common(KEYWORD_TOP_N)
return top_keywords
async def receive_danmu():
"""WebSocket连接抖音服务器,实时接收弹幕数据"""
# 抖音直播弹幕WebSocket接口(适配最新协议)
uri = f"wss://webcast3-ws-web-lf.bytedance.com/webcast/im/push/v2/?room_id={ROOM_ID}"
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
try:
async with websockets.connect(uri, extra_headers=headers) as websocket:
print(f"✅ 成功连接直播间:{ROOM_ID},开始实时监控弹幕...")
while True:
# 接收服务器推送的二进制数据
response = await websocket.recv()
try:
# 解码数据并解析JSON
data = json.loads(response.decode("utf-8", errors="ignore"))
# 筛选弹幕消息类型
if "messages" in data:
for msg in data["messages"]:
if msg.get("method") == "WebcastChatMessage":
# 提取核心弹幕字段
payload = json.loads(msg.get("payload", "{}"))
user_name = payload.get("user", {}).get("nickname", "匿名用户")
content = payload.get("content", "")
send_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
# 组装弹幕数据
danmu = {
"发送时间": send_time,
"用户昵称": user_name,
"弹幕内容": content
}
danmu_data.append(danmu)
# 实时打印弹幕
print(f"[{send_time}] {user_name}:{content}")
# 每接收10条弹幕保存一次文件
if len(danmu_data) % 10 == 0:
save_danmu_to_csv(danmu_data)
danmu_data.clear()
except:
# 忽略非弹幕格式数据
continue
except Exception as e:
print(f"❌ 连接失败:{str(e)},请检查直播间ID是否正确")
async def keyword_monitor():
"""实时提取并打印高频关键词"""
while True:
# 每5秒分析一次关键词
await asyncio.sleep(5)
# 读取最新的弹幕数据
try:
df = pd.read_csv(SAVE_PATH)
content_list = df["弹幕内容"].tolist()
top_keywords = extract_keywords(content_list)
print("\n" + "="*50)
print(f"📊 实时高频关键词({datetime.now().strftime('%H:%M:%S')}):")
for word, count in top_keywords:
print(f"🔹 {word}:{count}次")
print("="*50 + "\n")
except:
print("⏳ 暂无足够弹幕数据,继续监控...")
async def main():
"""主函数:并发运行弹幕接收与关键词提取"""
task1 = asyncio.create_task(receive_danmu())
task2 = asyncio.create_task(keyword_monitor())
await asyncio.gather(task1, task2)
if __name__ == "__main__":
# 启动异步任务
asyncio.run(main())receive_danmu()函数是项目的核心,通过websockets库建立与抖音直播服务器的长连接,持续接收二进制数据流。代码中通过判断消息类型WebcastChatMessage精准筛选弹幕数据,过滤礼物、点赞等无关消息,保证数据纯净度。
save_danmu_to_csv()函数采用追加模式将数据写入 CSV 文件,避免程序中断导致数据丢失。CSV 格式通用性强,可直接用 Excel、Python、SQL 等工具进行二次分析。
extract_keywords()函数基于 jieba 分词对弹幕内容进行中文分词,结合自定义停用词列表过滤无意义词汇,通过Counter统计词频,最终输出 TOP10 高频关键词。该模块无需训练模型,开箱即用,适合实时场景。
项目采用asyncio实现异步并发,同时运行弹幕接收和关键词提取两个任务,互不阻塞。弹幕实时接收,关键词定时分析,保证了系统的实时性与高效性。
ROOM_ID替换为你要监控的抖音直播间 ID;douyin_danmu.csv文件,存储所有原始弹幕;Ctrl+C即可终止运行。抖音会对频繁请求的客户端进行限制,若出现连接失败,可增加以下优化:
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。