使用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程序设计入门(3)数组的使用
Jun 16 Python
Python实现从url中提取域名的几种方法
Sep 26 Python
python 实现一个贴吧图片爬虫的示例
Oct 12 Python
对Python中9种生成新对象的方法总结
May 23 Python
python中pip的安装与使用教程
Aug 10 Python
python挖矿算力测试程序详解
Jul 03 Python
python IDLE 背景以及字体大小的修改方法
Jul 12 Python
python爬虫爬取幽默笑话网站
Oct 24 Python
Matplotlib使用字符串代替变量绘制散点图的方法
Feb 17 Python
python如何操作mysql
Aug 17 Python
浅谈Python 中的复数问题
May 19 Python
用Python将GIF动图分解成多张静态图片
Jun 11 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无限分类的类
2007/01/02 PHP
用PHP生成html分页列表的代码
2007/03/18 PHP
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
PHP中读写文件实现代码
2011/10/20 PHP
php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题
2014/06/19 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
CakePHP框架Model函数定义方法示例
2017/08/04 PHP
浅谈nodeName,nodeValue,nodeType,typeof 的区别
2015/01/13 Javascript
JavaScript中windows.open()、windows.close()方法详解
2016/07/28 Javascript
简单谈谈js的数据类型
2017/09/25 Javascript
微信小程序实现animation动画
2018/01/26 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
atom-design(Vue.js移动端组件库)手势组件使用教程
2019/05/16 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
python发布模块的步骤分享
2014/02/21 Python
CentOS 6.5中安装Python 3.6.2的方法步骤
2017/12/03 Python
python matplotlib实现双Y轴的实例
2019/02/12 Python
python经典趣味24点游戏程序设计
2019/07/26 Python
Django实现发送邮件找回密码功能
2019/08/12 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
python实现用户名密码校验
2020/03/18 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
在python中使用pyspark读写Hive数据操作
2020/06/06 Python
HTML5在a标签内放置块级元素示例代码
2013/08/23 HTML / CSS
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
Hello Molly美国:女性时尚在线
2019/08/26 全球购物
施工安全协议书
2013/12/11 职场文书
总经理职责
2013/12/22 职场文书
《藏戏》教学反思
2014/02/11 职场文书
我爱我校演讲稿
2014/05/21 职场文书
民事纠纷协议书
2016/03/23 职场文书
升职自荐书
2019/05/09 职场文书
写作技巧:优秀文案必备的3种结构
2019/08/19 职场文书
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
python函数的两种嵌套方法使用
2022/04/02 Python