使用python tkinter开发一个爬取B站直播弹幕工具的实现代码


Posted in Python onFebruary 07, 2021

项目地址

https://github.com/jonssonyan...

开发工具 python 3.7.9

pycharm 2019.3.5 代码

import threading
import time
import tkinter.simpledialog
from tkinter import END, simpledialog, messagebox

import requests


class Danmu():
 def __init__(self, room_id):
  # 弹幕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': room_id,
   'csrf_token': '',
   'csrf': '',
   'visit_id': '',
  }
  # 日志写对象
  self.log_file_write = open('danmu.log', mode='a', encoding='utf-8')
  # 读取日志
  log_file_read = open('danmu.log', mode='r', encoding='utf-8')
  self.log = log_file_read.readlines()

 def get_danmu(self):
  # 暂停0.5防止cpu占用过高
  time.sleep(1)
  # 获取直播间弹幕
  html = requests.post(url=self.url, headers=self.headers, data=self.data).json()
  # 解析弹幕列表
  for content in html['data']['room']:
   # 获取昵称
   nickname = content['nickname']
   # 获取发言
   text = content['text']
   # 获取发言时间
   timeline = content['timeline']
   # 记录发言
   msg = timeline + ' ' + nickname + ': ' + text
   # 判断对应消息是否存在于日志,如果和最后一条相同则打印并保存
   if msg + '\n' not in self.log:
    # 打印消息
    listb.insert(END, msg)
    listb.see(END)
    # 保存日志
    self.log_file_write.write(msg + '\n')
    # 添加到日志列表
    self.log.append(msg + '\n')
   # 清空变量缓存
   nickname = ''
   text = ''
   timeline = ''
   msg = ''


def bilibili(delay, room_id):
 # 创建bDanmu实例
 bDanmu = Danmu(room_id)
 while True:
  # 暂停防止cpu占用过高
  time.sleep(delay)
  # 获取弹幕
  bDanmu.get_danmu()


def author():
 # 弹出对话框
 messagebox.showinfo(title='关于', message='作者:阿壮Jonson\n日期:2021年2月4日\n微信公众号:科技猫')


# tkinter GUI
window = tkinter.Tk()
window.title('BiliBli弹幕查看工具')
window.minsize(300, 500)
window.geometry('400x600+250+100')

# 菜单栏
menubar = tkinter.Menu(window)
# Open放在菜单栏中,就是装入容器
menubar.add_command(label='关于', command=author)
# 创建菜单栏完成后,配置让菜单栏menubar显示出来
window.config(menu=menubar)

# 滚动条
sc = tkinter.Scrollbar(window)
sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)
# Listbox控件
listb = tkinter.Listbox(window, yscrollcommand=sc.set)
# 将部件放置到主窗口中
listb.pack(side=tkinter.LEFT, fill=tkinter.BOTH, expand=True)
# 滚动条动,列表跟着动
sc.config(command=listb.yview)

# 获取字符串(标题,提示,初始值)
room_id = simpledialog.askstring(title='请输入房间号', prompt='请输入房间号:'
         , initialvalue='21089733')
if room_id is not None:
 # 创建获取弹幕线程
 try:
  t = threading.Thread(target=bilibili, args=(0.5, str(room_id),))
  t.setDaemon(True)
  t.start()
 except:
  print("Error: 启动失败!请检查房间号是否正确")
# 进入循环显示
window.mainloop()

编译

使用第三方包:pyinstaller

命令

pyinstaller -F -w bilibli-danmu.py

参数解释

-F,-onefile 产生单个的可执行文件

-w,--windowed,--noconsolc 指定程序运行时不显示命令行窗口(仅对 Windows 有效) PyInstaller 支持的常用选项

使用python tkinter开发一个爬取B站直播弹幕工具的实现代码

补充

执行完命令之后会在项目目录下多出dist文件夹,编译后的文件就在该文件夹下 pyinstaller 不可以跨平台编译,windows平台下只能编译成windows下的执行文件(.exe),同理mac linux也是一样

到此这篇关于使用python tkinter开发一个爬取B站直播弹幕的工具的文章就介绍到这了,更多相关python tkinter开发B站直播弹幕工具内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python中暂存上传图片的方法
Feb 18 Python
Python闭包实现计数器的方法
May 05 Python
便捷提取python导入包的属性方法
Oct 15 Python
PyQt5实现QLineEdit添加clicked信号的方法
Jun 25 Python
django2笔记之路由path语法的实现
Jul 17 Python
Python netmiko模块的使用
Feb 14 Python
python GUI库图形界面开发之PyQt5滑块条控件QSlider详细使用方法与实例
Feb 28 Python
python实现Pyecharts实现动态地图(Map、Geo)
Mar 25 Python
使用matplotlib动态刷新指定曲线实例
Apr 23 Python
python如何保存文本文件
Jun 07 Python
python如何编写类似nmap的扫描工具
Nov 06 Python
python小程序之飘落的银杏
Apr 17 Python
python实现经典排序算法的示例代码
Feb 07 #Python
Python自动化测试基础必备知识点总结
Feb 07 #Python
10张动图学会python循环与递归问题
Feb 06 #Python
PyCharm 光标变成黑块的解决方式
Feb 06 #Python
使用Python下载抖音各大V视频的思路详解
Feb 06 #Python
python wsgiref源码解析
Feb 06 #Python
Python 中的函数装饰器和闭包详解
Feb 06 #Python
You might like
php+mysql实现数据库随机重排实例
2014/10/17 PHP
PHP实现小程序批量通知推送
2018/11/27 PHP
解决windows上php xdebug 无法调试的问题
2020/02/19 PHP
JScript中的undefined和"undefined"的区别
2007/03/08 Javascript
JS增加行复制行删除行的实现代码
2013/11/09 Javascript
JS按字节截取字符长度实例
2013/11/20 Javascript
Javascript 赋值机制详解
2014/11/23 Javascript
JavaScript中数组成员的添加、删除介绍
2014/12/30 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
jQuery简单实现禁用右键菜单
2015/03/10 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
jquery实现很酷的网页顶部图标下拉菜单效果
2015/08/22 Javascript
jQuery热气球动画半透明背景的后台登录界面代码分享
2015/08/28 Javascript
js记录点击某个按钮的次数-刷新次数为初始状态的实例
2017/02/15 Javascript
node.js中debug模块的简单介绍与使用
2017/04/25 Javascript
js用类封装pop弹窗组件
2017/10/08 Javascript
详解如何使用koa实现socket.io官网的例子
2018/11/04 Javascript
JavaScript变量作用域及内存问题实例分析
2019/06/10 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
vue 获取视频时长的实例代码
2019/08/20 Javascript
[09:22]2014DOTA2西雅图国际邀请赛 主赛事第二日TOPPLAY
2014/07/21 DOTA
python将字典列表导出为Excel文件的方法
2019/09/02 Python
在主流系统之上安装Pygame的方法
2020/05/20 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
IRO美国官网:法国服装品牌
2018/03/06 全球购物
德国电子产品购物网站:TechInTheBasket德国
2018/12/07 全球购物
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
c++工程师面试问题
2013/08/04 面试题
大专毕业生自我鉴定
2013/11/21 职场文书
图书室管理制度
2014/01/19 职场文书
总经理司机职责
2014/02/02 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
工程质量承诺书
2014/03/27 职场文书
工作会议方案
2014/05/21 职场文书
农行心得体会
2014/09/02 职场文书
市场总监岗位职责
2015/02/11 职场文书