使用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 相关文章推荐
Python3.x对JSON的一些操作示例
Sep 01 Python
Python Pillow Image Invert
Jan 22 Python
pyqt5中QThread在使用时出现重复emit的实例
Jun 21 Python
python中对数据进行各种排序的方法
Jul 02 Python
django框架模型层功能、组成与用法分析
Jul 30 Python
Django配置文件代码说明
Dec 04 Python
python中return的返回和执行实例
Dec 24 Python
torch 中各种图像格式转换的实现方法
Dec 26 Python
简单了解Django ORM常用字段类型及参数配置
Jan 07 Python
pytorch 实现删除tensor中的指定行列
Jan 13 Python
tensorflow 分类损失函数使用小记
Feb 18 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
PHP链表操作简单示例
2016/10/15 PHP
Prototype使用指南之base.js
2007/01/10 Javascript
Gird事件机制初级读本
2007/03/10 Javascript
如何快速的呈现我们的网页的技巧整理
2007/07/01 Javascript
js注意img图片的onerror事件的分析
2011/01/01 Javascript
Web Inspector:关于在 Sublime Text 中调试Js的介绍
2013/04/18 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
JavaScript简单实现鼠标拖动选择功能
2014/03/06 Javascript
js的toLowerCase方法用法实例
2015/01/27 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
Nodejs爬虫进阶教程之异步并发控制
2016/02/15 NodeJs
jQuery代码实现实时获取时间
2017/01/29 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
jQuery Validate格式验证功能实例代码(包括重名验证)
2017/07/18 jQuery
OpenLayers加载缩放控件使用方法详解
2020/09/25 Javascript
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
python基础教程之面向对象的一些概念
2014/08/29 Python
在GitHub Pages上使用Pelican搭建博客的教程
2015/04/25 Python
python爬虫获取京东手机图片的图文教程
2017/12/29 Python
基于Python函数和变量名解析
2019/07/19 Python
在Python中os.fork()产生子进程的例子
2019/08/08 Python
Python 实现顺序高斯消元法示例
2019/12/09 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
西班牙灯具网上商店:Lampara.es
2018/06/05 全球购物
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
超市开店计划书
2014/09/15 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
导游词之宁夏贺兰山岩画
2019/11/08 职场文书
导游词之南京中山陵
2019/11/27 职场文书
Java 将PPT幻灯片转为HTML文件的实现思路
2021/06/11 Java/Android
Python 多线程处理任务实例
2021/11/07 Python
MySQL优化常用的19种有效方法(推荐!)
2022/03/17 MySQL
Redis基本数据类型Zset有序集合常用操作
2022/06/01 Redis