适用于linux的bilibiliB站直播间弹幕爬虫脚本,命令行运行之,输入到命令行,部分内容参考自网络,代码底部可见原始代码出处

BUFF:然而,经测试,每次爬只能读取10条弹幕记录,这就使得在(sleeptime*10)(每秒)<弹幕新增量(每秒)时出现弹幕丢失的情况,此时需要调短sleeptime,由于本脚本是自用目的(我的粉丝数是个数),因此该bug对我本人暂无影响,有需要修复该bug的读者请留言或自行修复

# -*- coding:utf-8 -*-
# 时间:2024/4/26
# 原作者:猫先生的早茶
# 二创:wc1945451904@163.com
#!/usr/bin/python
#"""
# 获取bilibili直播间弹幕
# 房间号从网页源代码中获取
# 打开直播画面后,按ctrl+u 打开网页源代码,按ctrl+f 搜索 room_id
# 搜到的"room_id":1016中,1016就是房间号
# 获取不同房间的弹幕:修改代码第26行的roomid的值为对应的房间号roomid,或者通过公共设置处的变量来设置之
# 先在直播间手动输入一条弹幕,再开启该脚本
#""" # wc:使用python在命令行中启动脚本,需要提前安装request 包,conda install requests或者
# pip install requests import requests;
import time;
#公共设置
sleeptime = 3;#此处修改抓取间隔
groomid = '12159402'#二创者的直播间id(^_^)
if(groomid==''):
print("未设置目标直播间id");
return;
#彩色转译
RED = '\033[91m'
GREEN = '\033[92m'
YELLOW = '\033[93m'
BLUE = '\033[94m'
MAGENTA = '\033[95m'
CYAN = '\033[96m'
RESET = '\033[0m'
class Danmu():
def __init__(self):
self.t = False;#保证第一次循环一定要获取弹幕,然后进入第二循环
self.lastMsg = '';
self.lastTime = '';
self.lastNickname = ''; # 弹幕url
self.url = 'https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory';
# 请求头
self.headers = {
'Host':'api.live.bilibili.com',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
}
# 定义POST传递的参数
self.data = {
'roomid':groomid,#!!!修改为roomId
'csrf_token':'',
'csrf':'',
'visit_id':'',
} def get_danmu_once(self):
# 第一次获取直播间弹幕,全部打印
html = requests.post(url=self.url,headers=self.headers,data=self.data).json();
#
# 弹幕列表逐项提取
#逻辑:先打印,再判断并修改self.t
#如果弹幕很少,则会
if self.t==False:
for content in html['data']['room']:
self.lastTime = content['timeline']
self.lastNickname = content['nickname'];
self.lastText = content['text'];
print(f"{GREEN}{self.lastTime}{BLUE}{self.lastNickname}{RESET}"+'\t:'+self.lastText)
#print('\t:'+self.lastText)
#outmsg = self.lastTime+self.lastNickname+'\t:'+self.lastText;
#print(outmsg);
if(self.lastTime!=''):
self.t = True; def get_danmu_circle(self):
# 后续获取直播间弹幕,则不可靠地找到上次记录的最后一条弹幕,然后输出其(不含)后面的弹幕
html = requests.post(url=self.url,headers=self.headers,data=self.data).json();
count = 0;#开关
# 弹幕列表逐项提取
for content in html['data']['room']:
# 整合[ 昵称+对话内容 ]输出
if(count == 1):#此处为第一条新增弹幕,输出之
self.lastTime = content['timeline']
self.lastNickname = content['nickname'];
self.lastText = content['text'];
print(f"{GREEN}{self.lastTime}{BLUE}{self.lastNickname}{RESET}"+'\t:'+self.lastText)
#outmsg = self.lastTime+self.lastNickname+'\t:'+self.lastText;
#print(outmsg); # 判断新弹幕
elif(self.lastTime>=content['timeline']
and self.lastNickname==content['nickname']
and self.lastText==content['text']):
count = 1;#
continue;
# sum+=1;
# print("==============sum == %d",sum); # 创建bDanmu实例
bDanmu = Danmu(); while bDanmu.t==False:#False表示爬虫的弹幕列表为空
time.sleep(sleeptime);
bDanmu.get_danmu_once(); while True:
# 每隔x秒就检查一下直播间弹幕
time.sleep(sleeptime);
# 获取弹幕
bDanmu.get_danmu_circle(); #原作者原文链接:https://blog.csdn.net/qq_43017750/article/details/107771744

适用于linux的bilibiliB站直播间弹幕爬虫脚本的更多相关文章

  1. 用C#发送post请求,实现更改B站直播间标题[简单随笔]

    第一次发这样的网络数据包.记录一下. API参考 https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/live/man ...

  2. 模仿UP主,用Python实现一个弹幕控制的直播间!

    灵感来源 之前在B站看到一个有意思的视频: [B站][亦]终极云游戏!五千人同开一辆车,复现经典群体智慧实验 大家可以看看,很有意思. up主通过代码实现了实时读取直播间里的弹幕内容,进而控制自己的电 ...

  3. 使用linux的ffmpeg进行B站直播推流

    很久之前买了个友善的开发板R2S,一直在家吃灰.最近看到网上有用ffmpeg进行直播推流的案例,想把吃灰的的开发板利用起来,于是有了这篇教程. 第一步:安装ffmpeg sudo apt update ...

  4. 全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)

    前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过.同学们都忙着找工作,我也在这里抛一份简历吧,欢迎各位老板和猎手诚邀.我们进入正题.直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一 ...

  5. python - bilibili(一)获取直播间标题

    近几年,直播平台蛮火的.小时候,经过各种日漫的洗礼,在直播平台自然而然的就盯上了B站. 目前还是python菜鸟一枚,各位大佬请轻拍. 最终效果图: 闲话不说,我们来一步步解析B站的弹幕. 工具:py ...

  6. Linux服务器建站基础-选择何种配置和安装环境项目

    我们准备在搬瓦工笔记中,边整理和分享利用Linux VPS建站过程的同时,也会分享关于用户在选择和使用VPS服务器以及网站管理运营中的一些心得和建议.经常有很多网友在很多主机论坛.QQ群众问道,有没有 ...

  7. 2.如何实现使用VBS脚本程序对直播间自动评论

    前言:本文使用的是VBS脚本,实现了对繁星直播自动登录,自动进入房间并且自动评论. 前提准备:把需要刷的评论放到mysql中,再使用vbs读出评论 -------------------------- ...

  8. 获取本机IP(适用于Linux系统)

    获取本机IP(适用于Linux系统) /** * @desc 获取本机IP(适用于Linux系统) * @return Ip */ public static String getLocalIP() ...

  9. 【Linux】在Win10上搭建WSL(适用于Linux的Windows子系统)

    1.打开WSL  ,控制面板 -- 程序 -- 程序和功能 -- 打开或关闭Windows功能 - 选中[适用于Linux的Windows子系统] 2.开启后重启电脑 3.在Win10自带的Micro ...

  10. 海瑞菌的web前端学习直播间

    这是本人的web前端学习直播间 一般每天晚上10点--12点为直播时间...以web前端开发为主. 若设备无法打开,请点击链接进入:https://www.huya.com/14958154 setT ...

随机推荐

  1. 重新点亮shell————sed其他命令[十一]

    前言 简单介绍一下其他增删查. 正文 删除命令: 例子: 插入和更改: 例子i: 例子c: 读文件和写文件: 例子r: 下一行命令: 打印: 例子: 只想输出匹配的行: 退出命令: 前面的运行效率更高 ...

  2. CDN基础知识

    什么是CDN? CDN的全称是Content Delivery Network,即内容分发网络.其实现是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络" ...

  3. Signalr断线重连机制

    前言 Signalr 即时消息发布到服务器后发现链接老是自动断开,导致无法发送广播后面百度搜了一下,signalr有个超时的机制 解决办法(js) //链接到自己的hub var connection ...

  4. javascript现代编程系列教程之六——数字型数据类型转换

    一.整数转换 在 JavaScript 中,parseInt() 函数会将其参数转换为字符串,然后解析该字符串,并返回一个整数或 NaN.如果 parseInt() 函数的参数是一个非常大的浮点数(如 ...

  5. EasyNLP带你实现中英文机器阅读理解

    简介: 本⽂将提供对MacBERT模型的技术解读,以及如何在EasyNLP框架中使⽤MacBERT及其他预训练语言模型,进行中英文机器阅读理解任务的训练与预测. 作者:施晨.黄俊 导读 机器阅读理解是 ...

  6. MaxCompute Tunnel 技术原理及开发实战

    简介: MaxCompute(原名ODPS)是一种快速.完全托管的EB级数据仓库解决方案, 致力于批量结构化数据的存储和计算,为用户提供数据仓库的解决方案及分析建模服务.Tunnel是MaxCompu ...

  7. Hologres揭秘:深度解析高效率分布式查询引擎

    简介: 从阿里集团诞生到云上商业化,随着业务的发展和技术的演进,Hologres也在持续不断优化核心技术竞争力,为了让大家更加了解Hologres,我们计划持续推出Hologers底层技术原理揭秘系列 ...

  8. 如何避免出现SQL注入漏洞

    ​简介: 本文将针对开发过程中依旧经常出现的SQL编码缺陷,讲解其背后原理及形成原因.并以几个常见漏洞存在形式,提醒技术同学注意相关问题.最后会根据原理,提供解决或缓解方案. ​ 作者 | 阿里云安全 ...

  9. dotnet 警惕 async void 线程顶层异常

    在应用程序设计里面,不单是 dotnet 应用程序,绝大部分都会遵循让应用在出现未处理异常状态时终结的原则.在 dotnet 应用里面,如果一个线程顶层出现未捕获异常,则应用进程将会被认为出现异常状态 ...

  10. dotnet OpenXML 文本删除线解析方法

    本文来告诉大家如何解析读取在 OpenXML 里面存放的文本删除线,本文使用 PowerPoint 作为例子来告诉大家如何读取然后在 WPF 应用里面显示 在开始之前,期望大家已了解如何在 dotne ...