适用于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. linux 性能自我学习 ———— cpu 切换带来的性能损耗 [二]

    前言 我们知道现在操作系统,都是多进程和多线程,那么会有一个操作系统帮助我们去切换进程和线程,这个是要消耗cpu资源的,那么就来了解一下cpu资源消耗情况. 正文 一般是下面几个场景切换: 进程上下文 ...

  2. Spring Boot+mybatis集成数据库访问

    1.整合druid数据源 1.1 单数据源配置 <dependency> <groupId>com.alibaba</groupId> <artifactId ...

  3. dom4j 通用解析器,解析成List<Map<String,Object>>

    import java.io.InputStream; import java.util.Iterator; import java.util.LinkedHashMap; import java.u ...

  4. 力扣202(java&python)-快乐数(简单)

    题目: 编写一个算法来判断一个数 n 是不是快乐数. 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和.然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终 ...

  5. 阿里巴巴云数据仓库 MaxCompute 数据安全最佳实践

    ​简介:MaxCompute作为企业级SaaS模式云数据仓库,正在为客户业务及其数据提供持续的安全保护. MaxCompute 近期对产品的安全能力进行了全面升级 ,结合数据生命周期,针对数据误用.数 ...

  6. Flink+Hologres亿级用户实时UV精确去重最佳实践

    简介: Flink+Hologres亿级用户实时UV精确去重最佳实践 UV.PV计算,因为业务需求不同,通常会分为两种场景: 离线计算场景:以T+1为主,计算历史数据 实时计算场景:实时计算日常新增的 ...

  7. [FAQ] Argument 3 passed to Lcobucci\JWT\Signer\Hmac::doVerify() must be an instance of Lcobucci\JWT\Signer\Key, null given

    出现这个错误,说明没有找到 key,在使用 laravel-jwt 之前需要生成加密 key,使用: $ php artisan jwt:secret Link:https://www.cnblogs ...

  8. OLAP系列之分析型数据库clickhouse备份方式(五)

    一.常见备份方式 1.1 备份方式 备份方式 特点 物理文件备份 对物理文件进行拷贝,备份期间禁止数据写入 dump数据导入导出 备份方式灵活,但备份速度慢 快照表备份 制作_bak表进行备份 FRE ...

  9. C语言程序设计-笔记8-结构

    C语言程序设计-笔记8-结构 例9-1  输出平均分最高的学生信息.根据学生的基本信息包括学号.姓名.三门课程成绩以及个人平均成绩.输入n个学生的成绩信息,计算并输出平均分最高的学生信息. #incl ...

  10. 【爬虫实战】用python爬今日头条热榜TOP50榜单!

    目录 一.爬取目标 二.爬取结果 三.代码讲解 四.技术总结 五.演示视频 六.附完整源码 一.爬取目标 您好!我是@马哥python说,一名10年程序猿. 今天分享一期爬虫案例,爬取的目标是:今日头 ...