【Python】使用python tkinter开发一个爬取B站直播弹幕的工具

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

阿壮Jonsson发布于 12 分钟前

项目地址

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

开发工具

  1. python 3.7.9
  2. 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】使用python tkinter开发一个爬取B站直播弹幕的工具

补充

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

python程序员pycharm

阅读 21发布于 12 分钟前

本作品系原创,采用《署名-非商业性使用-禁止演绎 4.0 国际》许可协议

avatar

阿壮Jonsson

联系我请去 微信公众号:科技猫 上面有个人微信

4 声望

0 粉丝

0 条评论

得票时间

avatar

阿壮Jonsson

联系我请去 微信公众号:科技猫 上面有个人微信

4 声望

0 粉丝

宣传栏

项目地址

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

开发工具

  1. python 3.7.9
  2. 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】使用python tkinter开发一个爬取B站直播弹幕的工具

补充

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

以上是 【Python】使用python tkinter开发一个爬取B站直播弹幕的工具 的全部内容, 来源链接: utcz.com/a/113573.html

回到顶部