B站优先检索与视频分析
把「上网查资料」这件事,做成可追溯、可复核、可复现的流程:搜索 → 质量筛选 → 取字幕全文 → 可信度审查 → 分级精读 → 输出结论。
核心价值:不靠标题和播放量下判断,而是读完整字幕,并对来源做三维可信度审查与 S/A/B/C 分级。
一、适用场景
- 用户要求"上网查一下 / 调研 / 学习 / 了解某主题"
- 产品/工具的横评对比与消费决策("X 值不值得买")
- 需要从视频里提取方法、流程、框架、参数、实测数据
- 明确要求"以 B站为优先信息源"或"信息要有 B站来源"
二、依赖与环境
| 依赖 | 用途 | 是否必需 |
|---|---|---|
| Python 3.9+ | 运行脚本 | 必需 |
requests |
全部 HTTP 调用 | 必需 |
websocket-client |
bili_auth.py 通过 CDP 读取登录态 |
仅首次配置登录态时 |
| Edge 或 Chrome | CDP 调试端口取 Cookie | 仅首次配置登录态时 |
> 不需要 yt-dlp / playwright / ffmpeg / whisper —— 本技能走官方字幕接口(秒级),
> 这也是"单个视频分析控制在 5 分钟内"的关键。遇到无字幕视频,换一个候选,不做音频转写。
pip install requests websocket-client
三、登录态配置(一次性)
能力分界线:搜索 / 视频详情 / UP主粉丝数免登录可用;
字幕列表、UP主认证、投稿数、最早投稿时间必须登录态。
方式 A:一键自动抓取(推荐)
python {baseDir}/scripts/bili_auth.py auto # 启动浏览器窗口 → 登录 → 自动写入
python {baseDir}/scripts/bili_auth.py auto --timeout 900
python {baseDir}/scripts/bili_auth.py launch # 只启动窗口(稍后再抓)
python {baseDir}/scripts/bili_auth.py dump # 从已存在的调试窗口抓取
python {baseDir}/scripts/bili_auth.py check # 检查调试实例与 cookie
python {baseDir}/scripts/bili_auth.py status # 查看本地凭证并验证有效性
原理:用 Edge/Chrome 的 CDP 调试端口(默认 9222)读取 Cookie。
SESSDATA 是 HttpOnly,网页脚本 document.cookie 读不到 —— 这是用户"找不到"的头号原因,
只有 CDP 或 DevTools 的 Cookies 表格能拿到。
> ⚠️ 必须由用户侧启动浏览器:从 AI 会话直接启动 GUI 进程通常会被沙箱进程树回收,
> 窗口起来即失效。可行做法是把 auto 命令包成用户可双击的 .bat。
方式 B:手动提供 SESSDATA
- 浏览器登录 bilibili.com →
F12→ Application/应用(不是"控制台") - 左侧 Cookies →
https://www.bilibili.com→ 在名称列找SESSDATA,复制同行的值 - 若表格里翻不到:切「网络/Network」→
F5刷新 → 点任意api.bilibili.com请求
→ 请求标头里的整行Cookie:复制出来,由 AI 解析
凭证位置
~/.workbuddy/data/bilibili-research/auth.json # 新建默认位置
~/.workbuddy/data/bilibili-video-summary/auth.json # 旧路径,自动兼容回退
{ "sessdata": "<值>", "bili_jct": "<值,可选>" }
也可用环境变量 BILI_RESEARCH_DATA(数据目录)或 BILI_SESSDATA(凭证)覆盖。
四、五步工作流
Step 1 · 搜索 + 质量筛选
python {baseDir}/scripts/bili_research.py search "<关键词>" --limit 10
python {baseDir}/scripts/bili_research.py search "<关键词>" --limit 10 --check-subs
python {baseDir}/scripts/bili_research.py search "<关键词>" --limit 10 --json
内置机制(直接用默认参数,不要另写搜索逻辑):
| 机制 | 说明 |
|---|---|
| 多排序合并 | 同时查 totalrank + click + stow 去重,召回更全 |
| 字段补全 | 搜索接口的时长/点赞常是错的(0:00、0),用 view 接口并发补全 |
| 硬门槛 | 粉丝≥1万、播放≥1万、时长≥3分钟、点赞率≥1% |
| 自动放宽 | 命中不足时逐档放宽,优先降播放量、守住粉丝门槛,并明确标注放宽到第几档 |
| 多样性 | 同一 UP 主最多取 2 条 |
| 字幕预检 | --check-subs 提前确认候选有无字幕(多P会试前 3 个分P) |
评分权重顺序(关键):
诚信风险(否决级)→ 内容质量 → 评论数/评论率 → 收藏率 → 弹幕密度 → 播放/粉丝
- 评论数是重要质量信号(讨论量与评论率)
- 收藏率是"干货"的强信号(用户愿意存下来照做)
- 藏率异常低(播放≥5万但收藏率<0.2%)= 典型的"看完就走"营销内容 → 降权
输出解读:✅ 通过全部门槛,❌ 被淘汰并打印原因;
标记列出现"导购型标题 / 推广线索 / 超长合集 / 资历待核 / 藏率异常低"时,需在交付物中如实说明。
Step 2 · 选片
- 优先分数高 + 时长 5–60 分钟(信息密度最高、总结最快)
- 60–180 分钟可接受;超 3 小时先用
info看是否多 P,只取最相关的一讲 - 同主题尽量跨 2–3 个不同 UP 主,避免单一视角
- 任务类型决定选源侧重(详见
references/selection-and-credibility-standard.md)
python {baseDir}/scripts/bili_research.py info BV1xxxxxxxxx # 分P列表 + 字幕可用性
Step 3 · 取字幕全文
python {baseDir}/scripts/bili_research.py sub BV1xxxxxxxxx --paragraph --out 01_UP名.txt
python {baseDir}/scripts/bili_research.py sub BV1xxxxxxxxx --p 4 --json # 多P指定第几P
- 字幕优先级:UP主上传的人工中文 > B站 AI 中文 > 其它语言
--paragraph:按停顿把逐句字幕合并为段落(语义更完整、更省 token)subtitle.ai=true表示 AI 字幕,专业术语错字很多,必须纠错后再引用
Step 4 · 三维可信度审查(强制,不可跳过)
python {baseDir}/scripts/bili_research.py analyze BV1xxxxxxxxx
python {baseDir}/scripts/bili_research.py analyze 01.txt --duration 443 --title "视频标题"
三维模型:
| 维度 | 看什么 | 如何影响采信 |
|---|---|---|
| A 内容质量 | 实测/上手证据密度、内容体量、参数是否自洽 | 决定采信权重 |
| B 商业属性 | 推广内容的篇幅占比与位置分布 | 只做标注,不构成否决 |
| C 诚信风险 | 内容不实、商业关系不透明 | 唯一的一票否决维度 |
商业内容占比分级(看占比,不看有无):
| 占比 | 判定 | 处理 |
|---|---|---|
| ≥30%(或 ≥5% 且贯穿全片) | 主体为推广 | 无实测则弃用;有扎实实测则降权参考并标注 |
| 12%–30% | 多处植入 | 降权,只取事实性信息 |
| <12% 且集中在头/尾 | 局部导流(结尾求三连、一句购买链接) | ✅ 完全可接受,不影响采信 |
| 任意占比但已标注"赞助/送测" | 正常商业合作 | ✅ 加分(透明是诚信信号) |
⛔ 弃用红线(只认这四类,与"是否带货"无关)
- 字幕与标题严重不符(搬运号 / 字幕错配)
- 关键参数自相矛盾(同一对象前后打架)
- 整体以推广为主体且无实测(全片念参数、无一手证据)
- 商业关系不透明(通篇导流却不标注,或以"自发测评"包装广告)
> 带货不是原罪:UP 主需要生存,商业合作是行业常态。判定看的是"内容是否真实"与"关系是否透明"。
Step 5 · 分级精读 + 输出
| 级别 | 判据 | 使用方式 |
|---|---|---|
| S 级 | 质量 3-4 分 + 风险 0 + 商业属性无/低(或已标注) | 全文精读,作为主要论据 |
| A 级 | 质量 2-3 分 + 风险 ≤1 | 精读,关键数据需多源交叉后采用 |
| B 级 | 质量 1-2 分,或"主体推广但有实测" | 只取事实性信息,不作结论依据 |
| C 级 | 触发任一弃用红线(风险 ≥3) | 弃用,并在交付物写明理由 |
输出规范(重要):
- 对话窗口只回答用户提出的问题:结论先行、简洁直接,不铺陈检索过程
- 详情一律生成自包含 HTML 网页:检索过程、门槛与放宽档位、评分、S/A/B/C 分级、
弃用理由、AI 字幕纠错表、数据冲突与不确定性、完整依据与复现命令 - 每条来自视频的信息标注
BV号|UP主|标题|字幕来源;B站来源占比 ≥50%(自检)
五、命令速查
| 命令 | 作用 |
|---|---|
probe |
链路自检(免登录能力 + 登录态 + 字幕) |
search "<词>" [--limit N] [--check-subs] [--json] |
搜索 + 质量筛选 |
info BV号 |
视频详情 + 分P列表 + 字幕可用性 |
sub BV号 [--p N] [--paragraph] [--out f] [--json] |
取字幕全文 |
analyze BV号 \| 文件 [--duration N] [--title "..."] |
三维可信度审查 |
bili_auth.py auto \| launch \| dump \| check \| status |
登录态获取与查看 |
search 常用调参:--min-fans --min-play --min-duration --min-like-rate --per-up --orders
六、实测陷阱清单(务必遵守)
| # | 陷阱 | 正确做法 |
|---|---|---|
| 1 | AI 字幕专名错字极多:GLM→"GL"、Gemini→"Germany"、DeepSeek→"deep sic/dipstick"、Cursor→"CURSIR/科尔瑟"、"调岗"→"调侃" | 引用法条/机构名/型号/数字前必须按上下文校正,并在交付物附纠错表 |
| 2 | 不能用中文字面关键词做主题校验(会被错字骗过漏判) | 相关性校验以「英文词 + 数字型号」为判据 |
| 3 | 搜索接口的 duration/like 不可靠(出现 0:00、0) |
用 view 接口补全(脚本已内置) |
| 4 | 未登录时投稿列表可能只返回第一页,据此判"新号"会把老号误判 | 取最早投稿要先拿总数再直跳最后一页;未确认时标"资历待核",不猜 |
| 5 | space/wbi/arc/search 缺风控参数即 -352 |
必须带 platform=web、web_location=1550101、order_avoided=true |
| 6 | 接口偶发空响应(Expecting value: line 1 column 1)是限流抖动 |
同页重试即成功,不要当成"接口不可用" |
| 7 | player/wbi/v2(签名版)与 player/v2(经典版)字幕条数可能不一致 |
两路都请求、取并集、按语言去重 |
| 8 | 正则用 \b 收尾会导致中文单位漏匹配("56克拿在手里") |
用 (?![0-9A-Za-z]) 替代 \b |
| 9 | 90G 加速度 的 G 会被当成重量单位"克" |
按紧邻上下文排除 |
| 10 | 跨代对比会被误判为参数矛盾("V4 是 50 克,相比上代 V3 的 54.5 克") | 差值/对比数值单列排除,判定窗口要小(紧邻 4 字) |
| 11 | 空间页 space.bilibili.com/<mid> 是 SPA 空壳(约 10KB) |
不要试图从页面 HTML 抓数据 |
| 12 | 从 AI 会话启动 GUI 浏览器窗口会被沙箱回收 | 需 GUI 登录的场景交给用户双击 .bat |
七、参考文档
references/selection-and-credibility-standard.md— 选源与可信度分级标准(含量化权重、四类任务选源侧重、实测校准案例)
八、版本
| 版本 | 日期 | 说明 |
|---|---|---|
| 0.1.0-alpha | 2026-09-12 | 原始测试版。首次发布:搜索+多排序召回、质量筛选与自动放宽、字幕获取(含多P与分段)、三维可信度审查(参数矛盾检测 / 商业占比 / 主题相关性校验)、S/A/B/C 分级标准、CDP 登录态获取 |