弹幕
前几天,做了一个b站弹幕的爬取,只需要输入一个bv号,就可以查看这个视频的弹幕,并且提供了一种可以写入到文件的方法。但是有人反应,这种使用仍然非常困难,应该提供一个更加友好的用户界面。
因此本期我们就根据之前的爬取b站弹幕,制作一个简单的用户界面。
上期地址: https://blog.csdn.net/you_fan/article/details/141883957
用户界面
制作用户界面的方式有很多种,本次我们采用的是python自带的tkinter
,它可以在大多数支持python的图形系统中使用,因此非常的方便。
我们的用户界面需要包括一个输入框,支持用户输入bv号,还有一个搜索按钮,支持用户提交请求。然后需要一个文本框,用于显示得到的弹幕。
由于一个视频中的弹幕可能很多,所以说,我们需要有一个可以下拉的文本框,不然,没有办法将其全部显示出来。当我们点击搜索按钮的时候,实际上,程序会根据现在输入框中的内容(bv号),发起对应的b站弹幕请求,然后将结果写入到文本框,这就是我们程序的主要流程。
import tkinter as tk
from tkinter import messagebox, scrolledtext
from bili import crawl_danmaku # 这是我们之前的程序中提供的函数,可以参考之前的文章获取
# 创建程序的主要窗口
root = tk.Tk()
root.title("视频弹幕显示器")
# 设置窗口大小
root.geometry("600x400")
# 创建标签和输入框(用于接受视频地址)
label = tk.Label(root, text="输入视频bv号:")
label.pack(pady=10)
entry = tk.Entry(root, width=50)
entry.pack()
# 创建滚动(可下拉的)文本框(用于显示弹幕)
text_area = scrolledtext.ScrolledText(root, wrap=tk.WORD, height=10, width=60)
text_area.pack(pady=10)
# 设置一个搜索按钮(用于用户提交确认)
button = tk.Button(root, text="获取弹幕", command=lambda: show_danmaku(entry, text_area))
button.pack(pady=10)
# 获取并显示弹幕的函数
def show_danmaku(entry, text_area):
video_url = entry.get()
if not video_url.strip():
messagebox.showerror("错误", "请输入视频bv号")
return
danmaku_data = crawl_danmaku(video_url)
text_area.delete('1.0', tk.END)
for danmaku in danmaku_data:
text_area.insert(tk.END, f"{danmaku['弹幕发送时间']} - {danmaku['弹幕内容']}\n")
root.mainloop()
实际使用中,我们输入bv号,然后点击按钮,就可以得到结果了
修改DANMAKU列表的排序
可以发现,由于之前我们使用的是列表的默认排序,所以显示的弹幕有些混乱,因此,我们可以考虑对弹幕重新排序。
实际上,弹幕顺序有两个重要的参考,一个是弹幕出现在视频中的时间,也就是,弹幕在视频的第几秒被发送出来。这往往是和视频当前的内容有关系的,因为,弹幕往往会发送和视频当前有关的内容。
还有一种排序方式是,根据弹幕被发送的时间,也就是,这个弹幕在现实时间中,是在哪一年,哪一月,哪一天中被发送的。这样做的好处,是对于一些较长时间之前的视频可以轻松的观察到,这个视频以前的弹幕和现在的弹幕有什么区别。比如说,某个up主在2020年的时候,是热门的百大up主,弹幕内容可能都是鼓励和夸奖的,而由于其在2021年的时候“翻车了”,那么等到2024年的时候,发送的弹幕可能就变成了讽刺和批判的。
下面,我们就通过简单的修改列表顺序,将其改为通过弹幕的发送时间进行排序:
def show_danmaku(entry, text_area):
video_url = entry.get()
if not video_url.strip():
messagebox.showerror("错误", "请输入视频bv号")
return
danmaku_data = crawl_danmaku(video_url)
text_area.delete('1.0', tk.END)
for danmaku in sorted(danmaku_data, key=lambda x: x["弹幕发送时间"]):
text_area.insert(tk.END, f"{danmaku['弹幕发送时间']} - {danmaku['弹幕内容']}\n")
此时,我们就可以根据时间顺序,看出弹幕的变化了,比如说在2023年9月5日的时候:
而到了2024年,我们可以发现这个视频发送弹幕的人明显变少了,但是还是偶尔有人会重新回来观看:
总结
我们本期的内容通过了python的tkinter
库构建了一个基础的图形用户界面,使用户能够更便捷地查看到b站视频的弹幕。这比起之前的保存文件形式确实好了很多,使用上更加方便,查看起来也更加容易。
当然,对于这个基础的图形用户界面来说,这些功能还很简单,只能作为一个起点,还有很多功能可以进一步拓展,比如说,添加不同排序方式的切换,或者添加弹幕搜索等功能。总之,希望这些分享能为需要使用类似功能的朋友们提供一些帮助。