使用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程序员
Jun 12 Python
在Django的视图中使用form对象的方法
Jul 18 Python
Sanic框架Cookies操作示例
Jul 17 Python
使用memory_profiler监测python代码运行时内存消耗方法
Dec 03 Python
详解Python:面向对象编程
Apr 10 Python
Python 使用 Pillow 模块给图片添加文字水印的方法
Aug 30 Python
浅谈Pytorch中的自动求导函数backward()所需参数的含义
Feb 29 Python
python使用自定义钉钉机器人的示例代码
Jun 24 Python
Python Pygame实现俄罗斯方块
Feb 19 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 Python
python实现简单聊天功能
Jul 07 Python
Python中的matplotlib绘制百分比堆叠柱状图,并为每一个类别设置不同的填充图案
Apr 20 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 面向对象实现代码
2009/11/11 PHP
php下目前为目最全的CURL中文说明
2010/08/01 PHP
PHP封装的一个支持HTML、JS、PHP重定向的多功能跳转函数
2014/06/19 PHP
PDO防注入原理分析以及注意事项
2015/02/25 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
JAVASCRIPT下判断IE与FF的比较简单的方式
2008/10/17 Javascript
JavaScript与Image加载事件(onload)、加载状态(complete)
2011/02/14 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
微信小程序使用navigateTo数据传递的实例
2017/09/26 Javascript
微信小程序开发之IOS和Android兼容的问题
2017/09/26 Javascript
JavaScript的setter与getter方法
2017/11/29 Javascript
详解vue3中组件的非兼容变更
2021/03/03 Vue.js
[53:15]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS TNC
2018/03/30 DOTA
Python编程实现微信企业号文本消息推送功能示例
2017/08/21 Python
python遍历文件夹下所有excel文件
2018/01/03 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
详解Python 解压缩文件
2019/04/09 Python
python文字转语音的实例代码分析
2019/11/12 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
pycharm设置python文件模板信息过程图解
2020/03/10 Python
快速实现一个简单的canvas迷宫游戏的示例
2018/07/04 HTML / CSS
GafasWorld哥伦比亚:网上购买眼镜
2017/11/28 全球购物
优质美利奴羊毛袜,不只是徒步旅行:Darn Tough Vermont
2018/11/05 全球购物
大专计算机个人求职的自我评价
2013/10/21 职场文书
公司出纳岗位职责
2013/12/07 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
老人祝寿主持词
2014/03/28 职场文书
淘宝店策划方案
2014/06/07 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
怎么写工作检讨书
2014/11/16 职场文书
战马观后感
2015/06/08 职场文书
食堂管理制度范本
2015/08/04 职场文书
Python绘制散乱的点构成的图的方法
2022/04/21 Python