使用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使用urllib模块的urlopen超时问题解决方法
Nov 08 Python
简单介绍利用TK在Python下进行GUI编程的教程
Apr 13 Python
Python 装饰器深入理解
Mar 16 Python
python斐波那契数列的计算方法
Sep 27 Python
小白入门篇使用Python搭建点击率预估模型
Oct 12 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
Mar 11 Python
windows下numpy下载与安装图文教程
Apr 02 Python
django的ORM操作 删除和编辑实现详解
Jul 24 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
Python基于time模块表示时间常用方法
Jun 18 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
python3.6中anaconda安装sklearn踩坑实录
Jul 28 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 正则表达式小结
2009/08/31 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
优化WordPress中文章与评论的时间显示
2016/01/12 PHP
动态调用CSS文件的JS代码
2010/07/29 Javascript
XMLHttpRequest处理xml格式的返回数据(示例代码)
2013/11/21 Javascript
JQuery给元素绑定click事件多次执行的解决方法
2014/05/29 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
如何在 Vue.js 中使用第三方js库
2017/04/25 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
原生JS实现的多个彩色小球跟随鼠标移动动画效果示例
2018/02/01 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
nodejs和react实现即时通讯简易聊天室功能
2019/08/21 NodeJs
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
django 自定义用户user模型的三种方法
2014/11/18 Python
小小聊天室Python代码实现
2016/08/17 Python
基于python中staticmethod和classmethod的区别(详解)
2017/10/24 Python
Python之list对应元素求和的方法
2018/06/28 Python
Python Django框架单元测试之文件上传测试示例
2019/05/17 Python
Python threading的使用方法解析
2019/08/28 Python
python检测服务器端口代码实例
2019/08/31 Python
在django项目中导出数据到excel文件并实现下载的功能
2020/03/13 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
python开发一款翻译工具
2020/10/10 Python
纯CSS3制作漂亮带动画效果的主机价格表
2015/04/25 HTML / CSS
Raffaello Network西班牙:意大利拉斐尔时尚购物网
2019/03/12 全球购物
车间工艺员岗位职责
2013/12/09 职场文书
公司培训欢迎词
2014/01/10 职场文书
毕业班联欢会主持词
2014/03/27 职场文书
服务承诺书格式
2014/05/21 职场文书
家庭教育的心得体会
2014/09/01 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
个人查摆剖析材料
2014/10/16 职场文书
工商局所长四风自我剖析及整改措施
2014/10/26 职场文书
2015年房产经纪人工作总结
2015/05/15 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python