色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Python基于Tkinter開發(fā)一個(gè)爬取B站直播彈幕的工具

瀏覽:3日期:2022-06-20 14:26:45
簡(jiǎn)介

使用Python Tkinter開發(fā)一個(gè)爬取B站直播彈幕的工具,啟動(dòng)后在彈窗中輸入房間號(hào)即可,彈幕內(nèi)容會(huì)保存在腳本文件同級(jí)目錄下的.log擴(kuò)展名的文件中

開發(fā)工具 python 3.7.9 pycharm 2019.3.5實(shí)現(xiàn)代碼

import threadingimport timeimport tkinter.simpledialog # 使用Tkinter前需要先導(dǎo)入from tkinter import END, messageboximport requests# 全局變量,用于標(biāo)識(shí)線程是否退出is_exit = True# B站獲取彈幕對(duì)象class Danmu(): def __init__(self, room_id):# 彈幕urlself.url = ’https://api.live.bilibili.com/xlive/web-room/v1/dM/gethistory’# 請(qǐng)求頭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’: ’’,}# 日志寫對(duì)象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ā)言時(shí)間 timeline = content[’timeline’] # 記錄發(fā)言 msg = timeline + ’ ’ + nickname + ’: ’ + text # 判斷對(duì)應(yīng)消息是否存在于日志,如果和最后一條相同則打印并保存 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 = ’’# 線程對(duì)象def bilibili(room_id): # 創(chuàng)建bDanmu實(shí)例 bDanmu = Danmu(room_id) # 獲取彈幕 bDanmu.get_danmu()class BilibiliThread(threading.Thread): def __init__(self, room_id=None):threading.Thread.__init__(self)self.room_id = room_id # 重寫run()方法 def run(self):global is_exitwhile not is_exit: print(self.room_id) bilibili(self.room_id) # 暫停防止cpu占用過高 time.sleep(0.5)def author(): # 彈出對(duì)話框 messagebox.showinfo(title=’關(guān)于’, message=’作者:阿壯Jonsonn日期:2021年2月4日n微信公眾號(hào):科技貓’)# 實(shí)例化object,建立窗口windowwindow = tkinter.Tk()# 給窗口的可視化起名字window.title(’BiliBli彈幕查看工具’)# 設(shè)定窗口的大小(長(zhǎng) * 寬)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)# 創(chuàng)建一個(gè)主frame,長(zhǎng)在主window窗口上frame = tkinter.Frame(window)frame.pack()# 創(chuàng)建第二層框架frame,長(zhǎng)在主框架frame上面# 上frame_t = tkinter.Frame(frame)# 下frame_b = tkinter.Frame(frame)frame_t.pack(side=tkinter.TOP)frame_b.pack(side=tkinter.BOTTOM)# 創(chuàng)建標(biāo)簽tkinter.Label(frame_t, text=’請(qǐng)輸入房間號(hào):’, width=10, font=(’Arial’, 10)).pack(side=tkinter.LEFT)# 顯示成明文形式default_text = tkinter.StringVar()default_text.set('21089733')e1 = tkinter.Entry(frame_t, show=None, width=15, textvariable=default_text, font=(’Arial’, 10))e1.pack(side=tkinter.LEFT)# 定義兩個(gè)觸發(fā)事件時(shí)的函數(shù)start_point和end_point(注意:因?yàn)镻ython的執(zhí)行順序是從上往下,所以函數(shù)一定要放在按鈕的上面)# 開始def start_point(): try:room = e1.get()room_int = int(room)e1.configure(state=tkinter.DISABLED)b1.configure(state=tkinter.DISABLED)b2.configure(state=tkinter.NORMAL)if room_int is not None: global is_exit is_exit = False t = BilibiliThread() t.room_id = room_int # 創(chuàng)建獲取彈幕線程 t.setDaemon(True) t.start() except ValueError:messagebox.showinfo(title=’警告’, message=’輸入的房間號(hào)格式不正確,請(qǐng)?jiān)俅螄L試輸入!’)# 停止def end_point(): global is_exit is_exit = True e1.configure(state=tkinter.NORMAL) b1.configure(state=tkinter.NORMAL) b2.configure(state=tkinter.DISABLED)# 創(chuàng)建并放置兩個(gè)按鈕分別觸發(fā)兩種情況b1 = tkinter.Button(frame_t, text=’開始’, width=10, command=start_point, font=(’Arial’, 10))b1.pack(side=tkinter.LEFT)b2 = tkinter.Button(frame_t, text=’停止’, width=10, command=end_point, font=(’Arial’, 10))b2.pack(side=tkinter.LEFT)# 滾動(dòng)條sc = tkinter.Scrollbar(frame_b)sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)# Listbox控件listb = tkinter.Listbox(frame_b, yscrollcommand=sc.set, width=200, height=120)# 將部件放置到主窗口中l(wèi)istb.pack(side=tkinter.LEFT, fill=tkinter.BOTH, expand=True)# 滾動(dòng)條動(dòng),列表跟著動(dòng)sc.config(command=listb.yview)# 主窗口循環(huán)顯示window.mainloop()爬取效果

Python基于Tkinter開發(fā)一個(gè)爬取B站直播彈幕的工具

Github地址:

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

以上就是Python Tkinter開發(fā)一個(gè)爬取B站直播彈幕的工具的詳細(xì)內(nèi)容,更多關(guān)于Python 爬取B站直播彈幕的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: b站 嗶哩嗶哩 Python
相關(guān)文章:
主站蜘蛛池模板: 国产精品亚洲二区在线 | 国内视频一区二区 | 国产手机看片 | 精品爱爱| 在线免费观看色 | 在线 | 一区二区三区四区 | 2021国产精品一区二区在线 | 欧美日韩亚洲在线观看 | 国产男女免费完整视频 | 成人精品 | 欧美日韩加勒比一区二区三区 | 亚洲视频在线免费观看 | 亚洲毛片免费视频 | 久色国产 | 午夜黄色毛片 | 香蕉视频一级片 | 欧美成在线| 成人a视频片在线观看免费 成人a视频在线观看 | 美女视频黄视大全视频免费网址 | 人碰人碰人成人免费视频 | 日本韩国欧美在线 | 亚洲精品视频免费看 | 爽爽爽爽爽爽a成人免费视频 | 国产精品亚洲四区在线观看 | 国产精品一区二区在线观看 | 狠狠色婷婷丁香综合久久韩国 | 另类视频区第一页 | 成年人毛片网站 | 久久久久久久一线毛片 | 怡红院免费全部视频在线 | 男人躁女人躁的好爽免费视频 | 久久亚洲在线 | 手机看片高清国产日韩片 | 国产伦精品一区二区三区网站 | 美女国产在线观看免费观看 | 久久精品二三区 | 99精品高清视频一区二区 | 久久99久久99精品 | 亚洲天堂久久久 | 精品国产品欧美日产在线 | 奇米第四狠狠777高清秒播 |