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

  1. python 爬虫抓取斗鱼直播间弹幕

    这个嘛方法有很多,但市面上流行的方法也就两种 第一种就是通过斗鱼直播间的那个协议 第二种吗简单的我想骂人(前一种学些了贼多时间,简直了) 就是利用第三方库danmu 安装的方法依旧是如此的简单,打开终 ...

  2. 【爬虫】基于requests的B站直播实时弹幕爬取

    ​​​​​​ 网页分析 进入Network在众多响应中寻找和弹幕相关的API, 图3-1 B站直播房间页面的开发者工具界面preview 图3-2 在3-2展示的页面中可以查看到URL中有参数room ...

  3. B_zhan直播间弹幕抓取

    前两天研究了一下B_zhan的直播间,其实B_zhan的用户体量很少.我最近几个月一直在搞B站,几乎B_zhan能pa的都被我试过.其中还包括包括私信,大批量的私信.不过再三声明哈,我本人是为了学习, ...

  4. Scrapy项目 - 数据简析 - 实现斗鱼直播网站信息爬取的爬虫设计

    一.数据分析截图(weka数据分析截图 2-3个图,作业文字描述) 本次将所爬取的数据信息,如:房间数,直播类别和人气,导入Weka 3.7工具进行数据分析.有关本次的数据分析详情详见下图所示:   ...

  5. 经典爬虫学习(四)-selsenium实现斗鱼直播房间信息爬取

    本案例中通过两种不同的selenium作用实现了对斗鱼直播平台的房间信息进行多页爬取. selenium实现信息爬取以及页面跳转功能 selenium实现页面跳转功能,lxml解析库实现数据爬取功能 ...

  6. python爬斗鱼直播_python selenium爬取斗鱼所有直播房间信息过程详解

    还是分析一下大体的流程: 发现所有房间的信息都是保存在一个无序列表中的li中,所以我们可以先获取一个装有li的element对象的列表,然后在对每个element逐一操作 分析斗鱼的翻页,有一个下一页 ...

  7. Flink实时计算斗鱼某直播间弹幕发言数TopN

    先获取斗鱼直播间弹幕,由kafka发送至flink消费,每隔10min输出最近1H内发言数量前10的用户名. 主要pom依赖 <dependency><groupId>org. ...

  8. python 爬取直播弹幕视频_调用斗鱼API爬取直播间弹幕信息(用户昵称及弹幕内容)...

    调用斗鱼API爬取直播间弹幕信息(用户昵称及弹幕内容) 查看<斗鱼弹幕服务器第三方接入协议v1.4.1>,了解斗鱼API的使用方法,即如何连接斗鱼弹幕服务器.维持连接及获取弹幕信息 Pyt ...

  9. 利用Python爬虫爬取斗鱼直播间信息,以及直播的实际人数!

    首先我准备利用mysql来存储我爬取的信息,建一个host表如下: 然后下载pymysql ,利用它与数据库链接,因为在这里我只涉及到写入的操作: Unit_Mtsql 然后就是使用Beautiful ...

  10. 使用scrapy爬取斗鱼直播间信息

    目录 1. 谷歌抓包工具的使用 1.1 打开Chrome开发者工具的方法 1.2 开发者工具的结构 1.3 network模块 2. 使用谷歌抓包工具抓取斗鱼数据 3. 使用scrapy爬取斗鱼直播间 ...

最新文章

  1. 基于EMQ X,打造AIoT物联网视频接入解决方案
  2. 一个关于debug的说明(摘自thinkingpython)
  3. 在不知道根节点的情况下生成树形结构 (采用JSONObject)
  4. plsql(轻量版)_游标的使用2
  5. shell的控制语句
  6. python解析xml文件选用模块_python解析xml模块封装代码
  7. 前端学习(1382):多人管理项目2案例初始化
  8. java gc的特性_Java12新特性 -- 可中断的G1 Mixed GC
  9. 回头再说-006 时间音乐
  10. oracle客户端登录失败,Win7系统配置Oracle客户端连接失败的解决方法
  11. 485转61850规约转换C语言,61850规约转换器
  12. 撞库、脱库和洗库是什么意思
  13. 西部数据移动硬盘真伪测试软件,我的西数硬盘是真的吗?网购西数移动硬盘辨别真伪的方法...
  14. 生成一个6位数的随机密码,且需要包括字符、数字、特殊符号
  15. 用matlab画阻尼振动包络线,matlab阻尼振动模拟.doc
  16. 宠物商店电子商务系统er图
  17. Balanced Sequence
  18. Blender雕刻模块:2.81新功能遮罩提取(Mask Extract)
  19. wget 和scp对比_Linux中curl命令和wget命令的使用介绍与比较
  20. 我竟然被淘口令骗了500大洋...

热门文章

  1. 虚拟服务器网络无法连接,VMware虚拟机XP系统网络无法连接受限制或无连接解决方法...
  2. can总线程序讲解_CAN总线软件编程
  3. VS2019、VS2017、VS2013产品密钥
  4. 万年历代码c语言CSDN,c语言万年历代码
  5. 【美化】小米平板IOS主题
  6. 小米个性主题显示服务器不可用,MIUI个性主题上线透明壁纸功能,并修复状态栏无法混搭问题!...
  7. python读取pdf翻译生成word
  8. 最爱的文本编辑器_VS Code——插件推荐整理
  9. JavaWeb实现视频在线播放
  10. 房屋租赁管理系统mysql(含论文)