WebStorm NTFS权限 反射 log4j list matplotlib extjs 建造师报考条件 jq遍历元素 pip环境变量 solidworks图库 js原生点击事件 车载u盘 python怎么下载 python调用命令行 javafile java日期 java数据 java接口的使用 java结束线程 java异常 脚本下载 alphacam 微信python退出程序 彻底删除mysql 深入浅出通信原理 飞猪ip 海妖花粉哪里多 脚本大全 工程html加密 mtu设置多少最好 五笔字型86版 血dk属性 ssh框架原理及流程 linux解压缩命令 数组对象去重 化学式编辑器 电视应用安装器 游戏录屏软件 苹果商店怎么改成中文
当前位置: 首页 > 学习教程  > python

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

2021/2/8 15:55:44 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

项目地址 https://github.com/jonssonyan/bilibli-danmu 开发工具 python 3.7.9pycharm 2019.3.5 代码 import threading import time import tkinter.simpledialog from tkinter import END, simpledialog, messageboximport requestsclass Danmu():def __init__(self, r…

项目地址

https://github.com/jonssonyan/bilibli-danmu

开发工具

  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 支持的常用选项

在这里插入图片描述

补充

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

本文链接: http://www.dtmao.cc/news_show_2000370.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?