主要參考鬥魚的文件 dev-bbs.douyutv.com/forum.php?m…
通過socket與彈幕伺服器建立連線
第三方接入彈幕伺服器列表:
複製**
協議組成
訊息長度: 4 位元組小端整數,表示整條訊息(包括自身)長度(位元組數)。訊息長度出現兩遍,二者相同
訊息型別: 2 位元組小端整數, 表示訊息型別。取值如下: 689 客戶端傳送給彈幕伺服器的文字格式資料 690 彈幕伺服器傳送給客戶端的文字格式資料
加密字段: 暫時未用,預設為 0。保留字段: 暫時未用,預設為 0。
資料部分:鬥魚獨創序列化文字資料,結尾必須為『\0』。
msg是要傳送的資料部分,實際是要加上長度4頭部4+4個位元組長度的,也就是12個但是實際發出去的時候會自動加4個,所以+8
msg = msg.encode()
code = 689
# 客戶端傳送給彈幕伺服器
msg_length = len(msg) + 8
# 加 8 就行 不行換12
head = struct.pack('i',msg_length) + struct.pack('i',msg_length) + struct.pack('i',code)
self.socket.sendall(head+msg)
複製**
登入彈幕伺服器,不需要輸入使用者名稱和密碼,應該是和遊客模式一樣
login = f"type@=loginreq/roomid@=/\x00"
複製**
預設加入彈幕組-9999
,海量彈幕組
joingroup = f"type@=joingroup/rid@=/gid@=-9999/\x00"
複製**
保持於彈幕伺服器的連線 每隔45秒傳送心跳資訊
msg = f"type@=keeplive/tick@=/\x00"
複製**
正則匹配返回的內容,然後轉成python物件,其中會存在不能轉為utf-8的表情符號unicodedecodeerror: 'utf-8' codec can't decode byte 0xed in position 75: invalid continuation byte
忽略這個錯誤
content_obj = {}
# print(content)
content = content.decode(errors='replace').strip()
tmp_kv_list = content.split('/')
for kv in tmp_kv_list:
kv = kv.strip()
if len(kv) == 0:
continue
kv = kv.split("@=")
content_obj[kv[0]]=kv[1]
return content_obj
複製**
暫時就是為了好玩,沒有做持久化處理,之後可能會做
douyu
Python實時爬取鬥魚彈幕
輸入鬥魚房間號實時獲取彈幕資訊,實現效果如下 建立連線 通過tcp協議連線到彈幕伺服器 向彈幕伺服器傳送登入請求,登入彈幕伺服器,訊息格式type loginreq roomid 房間號 不需要賬號密碼 登陸成功之後伺服器會給你返回乙個登入成功資訊,這部分不用管,繼續向伺服器傳送乙個進入彈幕分組請求...
Python3 呼叫鬥魚開放API爬取彈幕
一些要求具體參考鬥魚的開放api協議。coding utf 8 import socket import re import time import struct from multiprocessing import process 根據鬥魚開放api協議,鏈結所必需的一些東西。url openb...
爬取B站彈幕
最近幾天學習爬蟲,便爬取了b站的彈幕,本篇博文記錄的是爬取彈幕的方法一,近期會更新方法二。下面是流程 點開這個包是這個形式的 這裡面就有明文的彈幕,但通過requests獲得的response是經過utf 8編碼加密過的,想要獲得彈幕內容還要解密。下面附 from bs4 import beauti...