佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > 使用python tkinter開發(fā)一個爬取B站直播彈幕工具的實現(xiàn)代碼

使用python tkinter開發(fā)一個爬取B站直播彈幕工具的實現(xiàn)代碼

熱門標簽:企業(yè)做大做強 電話運營中心 百度AI接口 客戶服務 呼叫中心市場需求 Win7旗艦版 語音系統(tǒng) 硅谷的囚徒呼叫中心

項目地址

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

開發(fā)工具 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傳遞的參數(shù)
  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']
   # 獲取發(fā)言
   text = content['text']
   # 獲取發(fā)言時間
   timeline = content['timeline']
   # 記錄發(fā)言
   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):
 # 創(chuàng)建bDanmu實例
 bDanmu = Danmu(room_id)
 while True:
  # 暫停防止cpu占用過高
  time.sleep(delay)
  # 獲取彈幕
  bDanmu.get_danmu()


def author():
 # 彈出對話框
 messagebox.showinfo(title='關(guān)于', 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='關(guān)于', command=author)
# 創(chuàng)建菜單欄完成后,配置讓菜單欄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:
 # 創(chuàng)建獲取彈幕線程
 try:
  t = threading.Thread(target=bilibili, args=(0.5, str(room_id),))
  t.setDaemon(True)
  t.start()
 except:
  print("Error: 啟動失??!請檢查房間號是否正確")
# 進入循環(huán)顯示
window.mainloop()

編譯

使用第三方包:pyinstaller

命令

pyinstaller -F -w bilibli-danmu.py

參數(shù)解釋

-F,-onefile 產(chǎn)生單個的可執(zhí)行文件

-w,--windowed,--noconsolc 指定程序運行時不顯示命令行窗口(僅對 Windows 有效) PyInstaller 支持的常用選項

補充

執(zhí)行完命令之后會在項目目錄下多出dist文件夾,編譯后的文件就在該文件夾下 pyinstaller 不可以跨平臺編譯,windows平臺下只能編譯成windows下的執(zhí)行文件(.exe),同理mac linux也是一樣

到此這篇關(guān)于使用python tkinter開發(fā)一個爬取B站直播彈幕的工具的文章就介紹到這了,更多相關(guān)python tkinter開發(fā)B站直播彈幕工具內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • Python基于Tkinter開發(fā)一個爬取B站直播彈幕的工具
  • python基于selenium爬取斗魚彈幕
  • Python爬蟲自動化爬取b站實時彈幕實例方法
  • 詳解python爬取彈幕與數(shù)據(jù)分析
  • Python爬蟲爬取Bilibili彈幕過程解析
  • python3寫爬取B站視頻彈幕功能
  • Python繪制詞云圖之可視化神器pyecharts的方法
  • python中實現(xiàn)詞云圖的示例
  • Python實現(xiàn)Wordcloud生成詞云圖的示例
  • Python爬取英雄聯(lián)盟MSI直播間彈幕并生成詞云圖

標簽:安康 喀什 崇左 濟南 山西 海南 山西 長沙

巨人網(wǎng)絡通訊聲明:本文標題《使用python tkinter開發(fā)一個爬取B站直播彈幕工具的實現(xiàn)代碼》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    托里县| 栾城县| 西盟| 渝中区| 永丰县| 东乌珠穆沁旗| 五指山市| 津南区| 乃东县| 金昌市| 浑源县| 来安县| 定日县| 宁波市| 绵阳市| 海林市| 宁德市| 梅州市| 蓬安县| 大同县| 宿迁市| 乐清市| 松原市| 昆山市| 隆化县| 井陉县| 新疆| 苗栗市| 泾阳县| 桐梓县| 思南县| 东平县| 中西区| 枝江市| 博湖县| 习水县| 利辛县| 武鸣县| 威宁| 太仆寺旗| 柳江县|