阿b的弹幕如何获取?这个可以帮到你!

弹幕

前几天,做了一个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号,然后点击按钮,就可以得到结果了

img

修改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日的时候:

img

而到了2024年,我们可以发现这个视频发送弹幕的人明显变少了,但是还是偶尔有人会重新回来观看:

img

总结

我们本期的内容通过了python的tkinter库构建了一个基础的图形用户界面,使用户能够更便捷地查看到b站视频的弹幕。这比起之前的保存文件形式确实好了很多,使用上更加方便,查看起来也更加容易。

当然,对于这个基础的图形用户界面来说,这些功能还很简单,只能作为一个起点,还有很多功能可以进一步拓展,比如说,添加不同排序方式的切换,或者添加弹幕搜索等功能。总之,希望这些分享能为需要使用类似功能的朋友们提供一些帮助。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瞎老弟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值