Python直播弹幕爬虫,有人爬过吗?求指导一下啊

直播平台: https://v.6.cn 爬取任意主播的房间的弹幕


Python直播弹幕爬虫,有人爬过吗?求指导一下啊
18 回复

六间房的不清楚,其他几家的直播弹幕我记得是 socket,没法爬吧,你得截个包看看怎么建立连接。


我写过几个直播平台的弹幕爬虫。核心思路其实都差不多:找到弹幕的WebSocket连接或者HTTP流接口,然后解析数据包。

以某牙直播为例,用WebSocket的代码框架大概长这样:

import websocket
import json
import threading
import time

class DanmuCrawler:
    def __init__(self, room_id):
        self.room_id = room_id
        self.ws_url = f"wss://www.huya.com/{room_id}"
        self.ws = None
        
    def on_message(self, ws, message):
        # 这里解析弹幕消息
        try:
            data = json.loads(message)
            if data.get('type') == 'chatmsg':  # 根据实际协议调整
                nickname = data.get('nn', '')
                content = data.get('txt', '')
                print(f"{nickname}: {content}")
        except:
            pass  # 有些消息不是JSON格式
            
    def on_error(self, ws, error):
        print(f"Error: {error}")
        
    def on_close(self, ws, close_status_code, close_msg):
        print("Connection closed")
        
    def on_open(self, ws):
        # 发送认证/心跳包
        auth_msg = json.dumps({
            'type': 'auth',
            'roomid': self.room_id
        })
        ws.send(auth_msg)
        
        # 启动心跳线程
        def heartbeat():
            while True:
                time.sleep(30)
                ws.send(json.dumps({'type': 'ping'}))
                
        threading.Thread(target=heartbeat, daemon=True).start()
        
    def run(self):
        self.ws = websocket.WebSocketApp(
            self.ws_url,
            on_open=self.on_open,
            on_message=self.on_message,
            on_error=self.on_error,
            on_close=self.on_close
        )
        self.ws.run_forever()

if __name__ == "__main__":
    crawler = DanmuCrawler("123456")  # 房间号
    crawler.run()

几个关键点:

  1. 不同平台协议不一样,有的用WebSocket,有的用HTTP长轮询
  2. 一般需要先发认证包,然后定时发心跳包保持连接
  3. 数据格式可能是JSON、protobuf或者自定义二进制格式
  4. 有些平台会加密,需要逆向JS找解密算法

建议先用浏览器开发者工具抓包,看看具体的数据流格式再写代码。

总结:先抓包分析协议,再模拟连接。

点进去看了一下,结果发现是 HTTP 的请求。
[![Snipaste_2018-04-18_02-10-35.png]( https://i.loli.net/2018/04/18/5ad638b1cc0a8.png)]( https://i.loli.net/2018/04/18/5ad638b1cc0a8.png)

github 上不少,记得有些是模拟发包请求弹幕的

是的,socket 这块不太懂,求教一下👍

没有这个平台的,有点麻烦

一般弹幕都是 websocket 和 socket 你要抓包看请求 找规律,然后想办法找到 key

抓包后看起来有点乱,看不太懂,所以没找到 key,求指导一二

我记得好几年前 b 站是可以打包下载弹幕的,不知道这功能现在还有没有

websocket 或者自己再 socket 上封装的协议。

https://github.com/zhao94254/rebuilt 这个是我用 go 写的,你可以参考下

pip install danmu

这个好像只有斗鱼的还可以运行

抓包用来看发包顺序,key 和加解密算法就需要你反编译一些官方的东西来找了,比如安卓、flash 等这就不深说了

有些平台是有开发协议的 ,不用爬,我记得比如熊猫直接有 API,你去官网看看.

模拟发包,然后弹幕出来然后过滤。

我记得应该没有,没有找到

弹幕的礼物数量可以取到吗?我没找到,求解

可以。有一个字段是礼物的。

回到顶部