You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python提取Bigo.tv同HTML Div中聊天/礼物信息技术求助

Bigo直播聊天/礼物抓取技术指引

核心问题说明

你用requests+BeautifulSoup4失败的原因是:Bigo直播的聊天、礼物消息是动态加载的,初始HTML里不会包含实时更新的内容,requests只能获取页面首次加载的静态代码,拿不到后续的实时消息。

可行技术方向

1. 选择动态内容抓取工具

两种主流方案:

  • 方案一:使用Selenium(适合入门)
    模拟真实浏览器行为,能直接获取页面实时渲染的内容,无需分析复杂接口。
  • 方案二:抓取WebSocket接口(效率更高)
    Bigo的实时消息是通过WebSocket推送的,用浏览器开发者工具(F12→Network→WS)找到对应的连接,解析推送的JSON数据,直接提取内容,无需启动浏览器。

2. 分类提取内容实现

不管用哪种方案,核心逻辑都是:

  • 筛选出class包含type1(聊天)和type6(礼物)的元素/数据
  • 从对应节点/字段中提取用户等级、用户名、内容/礼物信息

3. 避免重复记录的方法

用一个**集合(set)**存储已处理过的消息唯一标识(比如消息ID、内容+用户名的组合、元素的data-id属性),每次抓取新内容时先判断是否在集合中,不在则写入文件并加入集合。

4. 持续运行逻辑

  • Selenium方案:用while True循环,每隔1-3秒重新查询页面元素
  • WebSocket方案:保持连接,实时接收服务器推送的新消息

代码示例(Selenium版本)

from selenium import webdriver
from selenium.webdriver.common.by import By
import time

# 初始化浏览器(可加无头模式:options.add_argument("--headless=new"))
options = webdriver.ChromeOptions()
driver = webdriver.Chrome(options=options)
driver.get("你的Bigo直播房间URL")

# 存储已处理的消息标识,避免重复
processed_ids = set()

while True:
    # 定位目标容器下的所有消息/礼物项
    # 替换成你实际的容器ID,比如"chat-container"
    items = driver.find_elements(By.CSS_SELECTOR, "#容器ID > div[class*='type']")
    
    for item in items:
        # 获取消息唯一标识(优先用元素的data-id,没有就用文本内容)
        msg_id = item.get_attribute("data-id") or item.text.strip()
        if msg_id in processed_ids:
            continue
        processed_ids.add(msg_id)
        
        # 提取公共字段:用户等级、用户名
        # 替换成你实际的等级、用户名对应的class
        user_level = item.find_element(By.CSS_SELECTOR, ".user-level").text
        username = item.find_element(By.CSS_SELECTOR, ".user-name").text
        
        # 分类处理聊天/礼物
        item_class = item.get_attribute("class")
        if "type1" in item_class:
            chat_content = item.find_element(By.CSS_SELECTOR, ".chat-content").text
            with open("chat_log.txt", "a", encoding="utf-8") as f:
                f.write(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 聊天 | 等级:{user_level} | 用户:{username} | 内容:{chat_content}\n")
        elif "type6" in item_class:
            gift_info = item.find_element(By.CSS_SELECTOR, ".gift-info").text
            with open("gift_log.txt", "a", encoding="utf-8") as f:
                f.write(f"[{time.strftime('%Y-%m-%d %H:%M:%S')}] 礼物 | 等级:{user_level} | 用户:{username} | 礼物:{gift_info}\n")
    
    # 间隔2秒再检查新消息,避免频繁请求
    time.sleep(2)

注意事项

  • Selenium可能会被Bigo的反爬机制检测,可改用undetected-chromedriver库绕过检测
  • WebSocket方案需要分析接口的鉴权参数(比如token),首次请求页面时从Cookie或HTML中提取
  • 写入文件时用a模式(追加),并指定encoding="utf-8"避免乱码

内容的提问来源于stack exchange,提问作者BotheredNow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 19:17:30