日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

斗鱼直播间弹幕爬取2020年最新python

發布時間:2023/12/10 python 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 斗鱼直播间弹幕爬取2020年最新python 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PyMySQL==0.9.3 websocket_client==0.57.0

斗魚直播間彈幕2020年最新

? ? 我最近在學習python的直播間彈幕爬取,但是由于斗魚官方把第三方api的接口改變了,必須要注冊為開發者才能使用官方提供的方法進行彈幕爬取。所以我通過搜索教程了解到可以使用瀏覽器自帶的爬取功能對彈幕進行爬取。

原理如下:

利用websocket建立wss 連接

wss://danmuproxy.douyu.com:8506/'

8501-8507都可以使用。

發送登錄信息

發生入組信息

發送心跳數據,(和b站不一樣更高級了,有心跳數據了)。

利用wss必須對發送包進行加密,對接收的數據進行解包,

這些操作官方api 有提供,所以我就不再進行解釋了。

就能返回彈幕數據。完整代碼如下,將roomid?=?"666743" 改成你需要的id。

以下代碼并非我獨創,有借鑒別人的。

import websocket import threading import time class DyDanmuMsgHandler:# 將字符串數據按照斗魚協議封裝為字節流def dy_encode(self,msg):# 頭部8字節,尾部1字節,與字符串長度相加即數據長度# 為什么不加最開頭的那個消息長度所占4字節呢?這得問問斗魚^^data_len = len(msg) + 9# 字符串轉化為字節流msg_byte = msg.encode('utf-8')# 將數據長度轉化為小端整數字節流len_byte = int.to_bytes(data_len, 4, 'little')# 前兩個字節按照小端順序拼接為0x02b1,轉化為十進制即689(《協議》中規定的客戶端發送消息類型)# 后兩個字節即《協議》中規定的加密字段與保留字段,置0send_byte = bytearray([0xb1, 0x02, 0x00, 0x00])# 尾部以'\0'結束end_byte = bytearray([0x00])# 按順序拼接在一起data = len_byte + len_byte + send_byte + msg_byte + end_bytereturn datadef __parse_msg(self,raw_msg):'''解析數據:param raw_msg: 原始response數據:return:'''res = {}attrs = raw_msg.split('/')[0:-1]for attr in attrs:attr = attr.replace('@s','/')attr = attr.replace('@A','@')couple = attr.split('@=')res[couple[0]] = couple[1]return resdef dy_decode(self,msg_byte):'''解析斗魚返回的數據:param msg_byte::return:'''pos = 0msg = []while pos < len(msg_byte):content_length = int.from_bytes(msg_byte[pos: pos + 4], byteorder='little')content = msg_byte[pos + 12: pos + 3 + content_length].decode(encoding='utf-8', errors='ignore')msg.append(content)pos += (4 + content_length)return msgdef get_chat_messages(self,msg_byte):'''從數據獲取chatmsg數據:param msg_byte::return:'''decode_msg = self.dy_decode(msg_byte)messages = []for msg in decode_msg:res = self.__parse_msg(msg)if res['type'] !='chatmsg':continuemessages.append(res)return messages class DyDanmuCrawler:def __init__(self,roomid):self.__room_id = roomidself.__heartbeat_thread = Noneself.__client = DyDanmuWebSocketClient(on_open=self.__prepare,on_message=self.__receive_msg,on_close=self.__stop)self.__msg_handler = DyDanmuMsgHandler()self.__keep_HeartBeat = Truedef start(self):'''開啟客戶端:return:'''self.__client.start()def __stop(self):'''登出停止客戶端停止心跳線程:return:'''self.__logout()self.__client.stop()self.__keep_HeartBeat=Falsedef on_error(self, error):print(error)def on_close(self):print('close')# 發送入組消息def join_group(self):'''發送群組消息:return:'''join_group_msg = 'type@=joingroup/rid@=%s/gid@=1/' % (self.__room_id)msg_bytes = self.__msg_handler.dy_encode(join_group_msg)self.__client.send(msg_bytes)# 發送登錄請求消息def login(self):'''登陸:return:'''login_msg = 'type@=loginreq/roomid@=%s/dfl@=sn@AA=105@ASss@AA=1/' \'username@=%s/uid@=%s/ver@=20190610/aver@=218101901/ct@=0/.'%(self.__room_id,'99047358','99047358')msg_bytes = self.__msg_handler.dy_encode(login_msg)self.__client.send(msg_bytes)def __start_heartbeat(self):self.__heartbeat_thread = threading.Thread(target=self.__heartbeat)self.__heartbeat_thread.start()def __heartbeat(self):heartbeat_msg = 'type@=mrkl/'heartbeat_msg_byte = self.__msg_handler.dy_encode(heartbeat_msg)while True:self.__client.send(heartbeat_msg_byte)for i in range(90):time.sleep(0.5)if not self.__keep_HeartBeat:returndef __prepare(self):self.login()# 登錄后發送入組消息self.join_group()self.__start_heartbeat()def __receive_msg(self, msg):'''處理收到的信息:param msg::return:'''chat_messages =self.__msg_handler.get_chat_messages(msg)for message in chat_messages:print(f"{message['nn']}:{message['txt']}")# 將字節流轉化為字符串,忽略無法解碼的錯誤(即斗魚協議中的頭部尾部)#print(message.decode(encoding='utf-8', errors='ignore'))class DyDanmuWebSocketClient:def __init__(self,on_open,on_message,on_close):self.__url ='wss://danmuproxy.douyu.com:8506/'self.__websocket = websocket.WebSocketApp(self.__url,on_open=on_open,on_message=on_message,on_error=self.__on_error,on_close=on_close)def start(self):self.__websocket.run_forever()def stop(self):self.__websocket.close()def send(self,msg):self.__websocket.send(msg)def __on_error(self,error):print(error)roomid = "666743" dy_barrage_crawler = DyDanmuCrawler(roomid) dy_barrage_crawler.start()

總結

以上是生活随笔為你收集整理的斗鱼直播间弹幕爬取2020年最新python的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 91黄色免费版 | a免费毛片| 久热色| 国产麻豆成人精品av | 免费v片在线观看 | 久久国产免费看 | 特黄老太婆aa毛毛片 | 河北彩花中文字幕 | 国产精品丝袜一区二区 | 波多野结衣一本 | 色涩视频在线观看 | 国产第56页 | 少妇一级淫片免费放播放 | 四虎国产在线 | 女久久| av中文在线播放 | 成人传媒 | 欧美日韩观看 | 日日干天天射 | 暖暖日本在线视频 | 性一交一乱一色一免费无遮挡 | 女同vk| 亚洲色图综合网 | 欧美图片一区二区三区 | 精品久久久久久久久久岛国gif | 蜜桃成人网 | 欧洲视频在线观看 | 中文字字幕在线中文乱码电影 | 国产原创视频在线观看 | 日本三不卡 | 国产精品一品二品 | 国产成人久久久 | 天天久| 精品一二三四区 | 久久久二区| xxx视频在线观看 | 中文字幕av久久 | 99亚洲天堂 | 99国产精品视频免费观看一公开 | 加勒比色综合 | 青青久视频 | 午夜视频在线免费播放 | 欧美成人午夜剧场 | 大香伊人中文字幕精品 | 宅男午夜在线 | 欧美性受xxxxxx黑人xyx性爽 | 国产一卡二卡在线 | 日本h片在线观看 | 成人国产精品入口免费视频 | 亚洲天堂自拍 | 一级性生活免费视频 | 视频精品一区 | 综合国产视频 | 亚洲视频一二三 | 午夜影院在线观看18 | 国产精品视频免费看 | 色婷婷国产 | 成人av日韩 | 热久久亚洲 | 五月天视频网 | 成人wwwww免费观看 | 玖玖玖国产精品 | 久久久久国产精 | 免费欧美黄色 | 国产不卡网 | 亚洲天堂av线 | 欧美一级专区 | 男女调教视频 | 懂色aⅴ国产一区二区三区 亚洲欧美国产另类 | 免费高清欧美大片在线观看 | 日本熟妇乱子伦xxxx | 成人免费黄 | ww黄色| 国产又粗又长视频 | 亚洲激情一区二区三区 | 欧美中文字幕视频 | 久久无码人妻一区二区三区 | 免费国产a级片 | 久久动态图 | 大香蕉精品一区 | 伊人婷婷在线 | free性m.freesex欧美 | 男女www| 中文字幕黑人 | 亚洲精品天堂在线 | 爆操91| 亚洲精品黄色片 | 欧美一区二区在线视频观看 | xx视频在线观看 | 两根大肉大捧一进一出好爽视频 | 亚洲av成人片色在线观看高潮 | 亲嘴扒胸摸屁股免费视频日本网站 | 成人激情站 | 午夜dv内射一区二区 | 欧美成人国产精品一区二区 | 日韩一级在线 | 精品一区二区三区视频在线观看 | 97在线观看视频 | 色婷婷在线视频 |