哔哩视奸小助手:一款 Bilibili 用户评论分析利器

哔哩视奸小助手:一款 Bilibili 用户评论分析利器

想快速了解一位 B站 用户都在评论些什么? 今天给大家推荐一款简单易用的桌面应用程序: 哔哩视奸小助手 它可以帮助你轻松抓取指定用户的评论数据,并生成词云图,快速了解用户的评论热点和语言习惯。

访问此项目的Github地址

项目简介

哔哩视奸小助手 是一款专为分析 Bilibili 用户评论数据而设计的 Windows 桌面应用程序。 你只需要输入目标用户的 UID,程序就会自动抓取该用户的所有评论历史,将其保存为 Excel 文件,并生成一张直观的词云图。

功能特性

  • 图形化界面: 简洁美观的用户界面,操作简单易上手。
  • 一键数据抓取: 输入目标用户的 Bilibili UID,即可自动从第三方 API 获取全部评论数据。
  • 导出到 Excel: 将抓取到的评论数据(包括内容、时间、点赞数等)整理并保存为 .xlsx 格式的文件,方便后续筛选和分析。
  • 智能词云生成: 自动对评论文本进行预处理(如去除表情符号、回复格式),并生成一张高分辨率的词云图片,核心词汇一目了然。
  • 实时进度反馈: 界面内的日志窗口会实时显示抓取和分析的进度,任务状态清晰可见。
  • 个性化定制: 拥有定制的背景图片和窗口图标,界面更具特色。
  • 位置记忆: 程序能记住上次关闭时的窗口位置,方便下次使用。

运行环境与文件要求

  • 操作系统: Windows
  • 必备文件: 为了保证程序正常运行,请确保以下文件与 哔哩视奸小助手.exe 放置在同一个文件夹内
    • msyh.ttc: 微软雅黑字体文件,用于生成中文词云。
    • xz.ico: 程序的窗口图标文件。
    • xz.jpg: 程序的背景图片文件。

注意: 本程序是已编译的 .exe 版本,你无需安装 Python 或任何库即可直接运行。

如何使用

  1. 准备文件: 确保 哔哩视奸小助手.exe, msyh.ttc, xz.ico, 和 xz.jpg 这四个文件都在同一个文件夹里。
  2. 运行程序: 双击 哔哩视奸小助手.exe 启动程序。
  3. 输入 UID: 在 “请输入B站UID:”下方的输入框中,填入你想要查询的B站用户的UID。
  4. 开始分析:
    • 点击 “开始” 按钮。
    • 程序会弹出一个窗口,让你 选择一个文件夹 用于保存结果。
    • 选择好文件夹后,程序将自动开始抓取数据和生成词云,你可以在下方的日志框中看到实时进度。
  5. 查看结果: 任务完成后,在刚才选择的文件夹中会生成两个文件:
    • [UID]_评论数据.xlsx: 包含所有评论数据的 Excel 表格。
    • [UID]_评论数据.png: 根据评论内容生成的词云图片。

核心代码解析

让我们深入了解一下这个工具背后的核心代码 (main.py),重点分析两个核心函数:

  • fetch_data(uid, max_per_page=500, log_callback=None, loading_callback=None)

    该函数负责从 Bilibili 的第三方 API 获取指定用户的评论数据。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    def fetch_data(uid, max_per_page=500, log_callback=None, loading_callback=None):
    base_url = "https://api.aicu.cc/api/v3/search/getreply"
    all_replies = []
    page_number = 1

    while True:
    response = requests.get(base_url, params={
    'uid': uid,
    'pn': page_number,
    'ps': max_per_page,
    'mode': 0
    })

    if response.status_code != 200:
    log_callback(f"请求失败,状态码: {response.status_code}")
    return None # 返回 None 表示查询失败

    data = response.json()

    if data.get('code') != 0:
    log_callback(f"错误代码: {data.get('code')}")
    return None # 返回 None 表示查询失败

    replies = data['data']['replies']
    all_replies.extend(replies)

    if data['data']['cursor']['is_end']:
    break

    loading_callback(f"查询中... {LOADING_CHAR[page_number % len(LOADING_CHAR)]}") # 更新加载动画

    page_number += 1
    time.sleep(0.1) # 适当的延时

    return all_replies
    • 核心逻辑: 通过循环分页请求 API,直到获取所有评论数据。
    • 依赖: 使用 requests 库发送 HTTP 请求。
    • 错误处理: 检查 HTTP 状态码和 API 返回的错误码,及时报告错误。
    • 回调函数: 使用 log_callbackloading_callback 函数,实时更新 UI 界面上的日志信息和加载动画。
    • API 地址: 使用 https://api.aicu.cc/api/v3/search/getreply
  • generate_word_cloud(file_path, log_callback=None)

    该函数负责从 Excel 文件中读取评论数据,并生成词云图片。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
        def generate_word_cloud(file_path, log_callback=None):
    log_callback("正在进行分析......")
    df = pd.read_excel(file_path)
    df['message'] = df['message'].fillna('') # 填充缺失值

    # 使用正则表达式过滤表情包和回复
    def filter_text(text):
    if not isinstance(text, str):
    return '' # 如果不是字符串,返回空字符串
    text = re.sub(r'
    $$
    .*?
    $$
    ', '', text) # 移除表情包,例如 [doge]
    text = re.sub(r'^回复 @.+?:\s*', '', text) # 移除 "回复 @用户名 :"
    return text

    df['message'] = df['message'].apply(filter_text)
    text = ' '.join(df['message'])

    log_callback("云图生成中......")
    # 增加图片分辨率
    wordcloud = WordCloud(width=8000, height=4000, background_color='white', font_path='msyh.ttc').generate(text)

    # 保存词云图片
    output_file_path = os.path.splitext(file_path)[0] + ".png"

    def save_wordcloud_to_file():
    # 调整 matplotlib 显示尺寸
    plt.figure(figsize=(20, 10))
    plt.imshow(wordcloud, interpolation="bilinear")
    plt.axis('off')

    # 保存高清图片到xlsx同一目录下
    plt.savefig(output_file_path, dpi=300) # 可以选择保存,dpi越高越清晰
    plt.close() # 关闭图像,防止显示

    log_callback(f"词云已保存到 {output_file_path}")

    # 使用 root.after 将 Matplotlib 代码放到主线程中执行
    root.after(0, save_wordcloud_to_file)
    • 核心逻辑: 读取 Excel 数据,清洗文本,生成词云,保存图片。
    • 依赖: 使用 pandas 库读取 Excel 文件,使用 wordcloud 库生成词云,使用 matplotlib 库保存图片。
    • 文本清洗: 使用正则表达式去除评论中的表情符号和回复信息,提高词云质量。
    • 字体: 依赖 msyh.ttc 字体文件显示中文。
    • 多线程: 使用 root.after 将绘图操作放到 Tkinter 的主线程中执行,避免 UI 阻塞。

注意事项

  • API 依赖: 本工具的数据来源于第三方 API (api.aicu.cc)。如果该 API 服务不稳定或失效,可能会导致程序无法正常工作。
  • 网络要求: 程序在运行时需要连接到互联网。
  • 处理时间: 对于评论数量非常庞大的用户,数据抓取和分析过程可能会持续较长时间,请耐心等待。
  • 字体文件: msyh.ttc 字体文件对于生成正确的中文词云至关重要,请勿删除或改名。
  • 背景图片来源: 软件背景图片来源于画师 未确认_Sora (感谢画师!),使用请注意版权。

总结

哔哩视奸小助手 是一款简单实用的 Bilibili 用户评论分析工具。 它可以帮助你快速了解用户的评论内容和特点,适合用于研究用户行为、分析社区氛围等场景。 如果你对这款工具感兴趣,不妨下载体验一下!


声明: 本博客文章中如有任何涉及版权的内容,请立即联系 admin@main.712521.xyz,我们将尽快处理。