位置: 编程技术 - 正文

基于asyncio 异步协程框架实现收集B站直播弹幕(axios异步)

编辑:rootadmin

推荐整理分享基于asyncio 异步协程框架实现收集B站直播弹幕(axios异步),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:async用于异步加载,即先下载文件,不阻塞其他代码执行,@async异步方法,async await异步,@async异步方法,async异步异常处理,async异步异常处理,@async异步方法,@async异步方法,内容如对您有帮助,希望把文章链接给更多的朋友!

前言

虽然标题是全站,但目前只做了等级 top 直播间的全天弹幕收集。

弹幕收集系统基于之前的B 站直播弹幕姬 Python 版修改而来。具体协议分析可以看上一篇文章。

直播弹幕协议是直接基于 TCP 协议,所以如果 B 站对类似我这种行为做反制措施,比较困难。应该有我不知道的技术手段来检测类似我这种恶意行为。

我试过同时连接 个房间,和连接单个房间 次的实验,都没有问题。> 会被关闭链接。

直播间的选取

现在弹幕收集系统在选取直播间上比较简单,直接选取了等级 top。

以后会修改这部分,改成定时去 查看新开播的直播间,并动态添加任务。

异步任务和弹幕存储

收集系统仍旧使用了 asyncio 异步协程框架,对于每一个直播间都使用如下方法来加进 loop 中。

其实若将心跳任务 HeartbeatLoop 放入 connectorServer 中去启动,代码看起来更优雅一些。但这么做是因为我需要维护一个任务列表,后面会有描述。

在弹幕存储上我花了些时间选择。

基于asyncio 异步协程框架实现收集B站直播弹幕(axios异步)

数据库存储是一个同步 IO 的过程,Insert 的时候会阻塞弹幕收集的任务。虽然有 aiomysql 这种异步接口,但配置数据库太麻烦,我的设想是这个小系统能够方便地部署。

最终我选择使用自带的 sqlite3。但 sqlite3 无法做并行操作,故开了一个线程单独进行数据库存储。在另一个线程中, * 2 个任务搜集所有的弹幕、人数信息,并塞进队列 commentq, numq 中。存储线程每隔 s 唤醒一次,将队列中的数据写进 sqlite3 中,并清空队列。

在多线程和异步的配合下,网络流量没有被阻塞。

可能的连接失败场景处理

弹幕协议是直接基于 TCP,位与位直接关联性较强,一旦解析错误,很容易就抛 Exception(个人感觉,虽然 TCP 是可靠传输,但B站服务器自身发生错误也是有可能的)。所以有必要设计一个自动重连机制。

在 asyncio 文档中提到,

Done means either that a result / exception are available, or that the future was cancelled.

函数正常返回、抛出异常或者是被 cancel,都会退出当前任务。可以使用 done() 来判断。

每一个直播间对应两个任务,解析任务是最容易挂的,但并不会影响心跳任务,所以必须找出并将对应心跳任务结束。在创建任务的时候使用字典记录每个房间的两个任务,

self.tasks[url] = [task1, task2]

在运行过程中,每隔 s 做一次检查,

实际我只见过一次任务失败的场景,是因为主播房间被封了,导致无法进入直播间。

结论

B站人数是按照连接弹幕服务器的链接数量统计的。通过操纵链接量,可以瞬间增加任意人数观看,有商机? 运行的这几天中,发现即使大部分房间不在直播,也能有 >5 的人数,包括凌晨。我只能猜测也有和我一样的人在 h 收集弹幕。 top 平均一天 M 弹幕数据。 收集的弹幕能做什么?还没想好,可能可以拿来做用户行为分析 -_^

最后附上本源码的GITHUB地址

python开发环境PyScripter中文乱码问题解决方案 PyScripter看起来还是挺不错的一个pythonide环境:PyScripter2.6.0.0python3.4问题:PyScripter有个小坑,打开文件后中文都成了乱码。在PyScripter中新建的文件中文可

Python读取图片属性信息的实现方法 本文是利用Python脚本读取图片信息,有几个说明如下:1、没有实现错误处理2、没有读取所有信息,大概只有GPS信息、图片分辨率、图片像素、设备商、

全面了解python中的类,对象,方法,属性 python中一切皆为对象,所谓对象:我自己就是一个对象,我玩的电脑就是对象,坐着的椅子就是对象,家里养的小狗也是一个对象。。。。。。我们通

标签: axios异步

本文链接地址:https://www.jiuchutong.com/biancheng/385415.html 转载请保留说明!

上一篇:asyncio 的 coroutine对象 与 Future对象使用指南

下一篇:python开发环境PyScripter中文乱码问题解决方案(pythen开发环境)

  • 预付账款借贷方表示什么意思
  • 小微自开专票申报时怎么填写
  • 税控盘费用进什么科目
  • 如何根据销售额降序排序
  • 城建税减免性质代码 0申报
  • 税金及附加有啥
  • 待清算商户款项怎么做账
  • 增值税减免备案改备查后续管理
  • 商业折扣的纳税影响
  • 企业合并相关舞弊风险有哪些
  • 社保滞纳金可以计入管理费用吗为什么
  • 同一控制吸收合并会计处理
  • 开具的销项发票是否都要入收入科目吗?
  • 内蒙古地税电子税务局app
  • 工会开票是否需要开户银行
  • 建筑服务可以差额征收吗
  • 研发支出与开发成本的区别
  • 怎样冲回多提应付职工薪酬?
  • 损益表现金流量表资产负债表
  • 生产酒的税收是多少
  • 企业所得税季报人数怎么填
  • 没有单据怎么核算成本?
  • 股息红利纳税义务发生地
  • 单位缴纳工会经费的会计分录怎么做
  • 证券权益包括哪些内容
  • 路由器网速太慢了怎么回事
  • php使用redis缓存技术
  • pcas service进程可以关闭么
  • 商业汇票计入什么科目技能高考
  • php执行sh脚本
  • 发票抬头可以是两个人吗
  • php 遍历树
  • 员工报销的差旅费属于什么科目
  • css获取id
  • 关于简单的绘画
  • ssh命令用法
  • 资产负债表其他应收款计算公式
  • linux中搭建web服务器
  • 增值税发票完税证明图片
  • 如何用织梦在本地搭建网站
  • python repeat函数
  • 债券承销费是指什么费用
  • sql server 新增字段
  • 公司基本账户提额怎么算
  • 职工釆暖费有何新政策
  • 工会经费通过应交税费核算吗
  • 预提费用在汇算清缴时调整
  • 个体工商户生产经营所得税优惠政策
  • 收到公众号消息提醒
  • 补提折旧以前年度损益调整
  • 代理进口产品
  • 房地产开发企业销售自行开发的房地产项目
  • 不是公司股东的情况说明模板
  • 党委经费是国家政府出吗?
  • 设置资产处置损益的依据
  • 什么是现金流量表
  • 发票监制章是什么章图片
  • 库存商品账务没做如何调增
  • mysql5.7.21安装
  • 微软windows8.1
  • win8还能用吗
  • KunlunPlatform.exe是什么进程?KunlunPlatform.exe是安全的程序吗?
  • centos7误删除怎么恢复
  • win7任务栏突然变成灰色
  • win7怎么连接耳机蓝牙
  • 单线程语言有哪些
  • android2d游戏开发
  • shell脚本定时执行命令
  • python对excel操作真的有提高吗
  • Unity3D游戏开发标准教程
  • node.js入门经典pdf
  • javascript实现3D切换焦点图
  • flask框架官方文档
  • js闭包的定义和用途
  • 小规模纳税人开专票可以抵扣吗
  • 河南新乡地税局罗姓病逝
  • 购进货物计入什么科目
  • 无锡税务app
  • 地方税务局投诉有用吗
  • 国家税务总局176号公告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设