适用于linux的bilibiliB站直播间弹幕爬虫脚本
适用于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站直播间弹幕爬虫脚本的更多相关文章
- 用C#发送post请求,实现更改B站直播间标题[简单随笔]
第一次发这样的网络数据包.记录一下. API参考 https://github.com/SocialSisterYi/bilibili-API-collect/blob/master/live/man ...
- 模仿UP主,用Python实现一个弹幕控制的直播间!
灵感来源 之前在B站看到一个有意思的视频: [B站][亦]终极云游戏!五千人同开一辆车,复现经典群体智慧实验 大家可以看看,很有意思. up主通过代码实现了实时读取直播间里的弹幕内容,进而控制自己的电 ...
- 使用linux的ffmpeg进行B站直播推流
很久之前买了个友善的开发板R2S,一直在家吃灰.最近看到网上有用ffmpeg进行直播推流的案例,想把吃灰的的开发板利用起来,于是有了这篇教程. 第一步:安装ffmpeg sudo apt update ...
- 全栈开发——动手打造属于自己的直播间(Vue+SpringBoot+Nginx)
前言 大学的学习时光临近尾声,感叹时光匆匆,三年一晃而过.同学们都忙着找工作,我也在这里抛一份简历吧,欢迎各位老板和猎手诚邀.我们进入正题.直播行业是当前火热的行业,谁都想从中分得一杯羹,直播养活了一 ...
- python - bilibili(一)获取直播间标题
近几年,直播平台蛮火的.小时候,经过各种日漫的洗礼,在直播平台自然而然的就盯上了B站. 目前还是python菜鸟一枚,各位大佬请轻拍. 最终效果图: 闲话不说,我们来一步步解析B站的弹幕. 工具:py ...
- Linux服务器建站基础-选择何种配置和安装环境项目
我们准备在搬瓦工笔记中,边整理和分享利用Linux VPS建站过程的同时,也会分享关于用户在选择和使用VPS服务器以及网站管理运营中的一些心得和建议.经常有很多网友在很多主机论坛.QQ群众问道,有没有 ...
- 2.如何实现使用VBS脚本程序对直播间自动评论
前言:本文使用的是VBS脚本,实现了对繁星直播自动登录,自动进入房间并且自动评论. 前提准备:把需要刷的评论放到mysql中,再使用vbs读出评论 -------------------------- ...
- 获取本机IP(适用于Linux系统)
获取本机IP(适用于Linux系统) /** * @desc 获取本机IP(适用于Linux系统) * @return Ip */ public static String getLocalIP() ...
- 【Linux】在Win10上搭建WSL(适用于Linux的Windows子系统)
1.打开WSL ,控制面板 -- 程序 -- 程序和功能 -- 打开或关闭Windows功能 - 选中[适用于Linux的Windows子系统] 2.开启后重启电脑 3.在Win10自带的Micro ...
- 海瑞菌的web前端学习直播间
这是本人的web前端学习直播间 一般每天晚上10点--12点为直播时间...以web前端开发为主. 若设备无法打开,请点击链接进入:https://www.huya.com/14958154 setT ...
随机推荐
- mysql 必知必会整理—数据库的维护[十八]
前言 简单介绍一下数据库的维护. 正文 像所有数据一样,MySQL的数据也必须经常备份. 由于MySQL数据库是基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据. 但是,由于这些文件总是处 ...
- native react 代码智能提示
背景 在vscode 中,虽然有插件可以达到代码提示的效果但是不是很嗨. 所以加上这些: 全局安装typings: npm install typings -g 1 安装react和react-nat ...
- Kafka的实现细节
Kafka的实现细节 一.Topic和Partition 在Kafka中的每一条消息都有一个topic.一般来说在我们应用中产生不同类型的数据,都可以设置不同的主题.一个主题一般会有多个消息的订阅者, ...
- vue登录3D效果
实现的效果 登录动态效果很炫酷,话不多说直接上代码: 组件template <template> <div class="entrance"> <di ...
- Vue3开源组件库
最近收到的很多问题都是关于Vue3组件库的问题 今天就给大家推荐几个基于Vue3重构的开源组件库 目前状态都处于Beta阶段,建议大家抱着学习的心态入场,勿急于用到生产环境 Ant-design-vu ...
- 百度unit闲聊机器人
import json import random import requests # client_id 为官网获取的AK, client_secret 为官网获取的SK client_id = & ...
- 为什么游戏行业喜欢用PolarDB
简介: PolarDB 在游戏行业的最佳实践 为什么游戏行业喜欢用PolarDB 游戏行业痛点 在我看来, 不同行业对数据库使用有巨大的差别. 比如游戏行业没有复杂的事务交易场景, 他有一个非常大的b ...
- [GPT] Linux 如何查看 crontab 的运行记录
要查看crontab的运行记录,可以使用以下命令: $ grep CRON /var/log/syslog 或者 $ tail /var/log/syslog 这将在 /var/log/syslo ...
- 2018-11-23-国内好用的-DNS-列表
title author date CreateTime categories 国内好用的 DNS 列表 lindexi 2018-11-23 12:45:57 +0800 2018-11-23 12 ...
- jumpserver-v3搭建配置与使用
一.jumpserver简介 官网:https://www.jumpserver.org/ 文档:https://docs.jumpserver.org/zh/v3/ 单机部署:https://doc ...