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
相关产品推荐
相关产品推荐

