鬥魚彈幕資料爬取

2021-09-24 07:33:20 字數 1694 閱讀 2072

主要參考鬥魚的文件 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...