From 027b82eb281b05c729dedc8d150a4d00171d110c Mon Sep 17 00:00:00 2001 From: OpenClaw Agent Date: Sat, 7 Feb 2026 17:27:23 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E6=9E=84=20B=E7=AB=99=E6=8F=90?= =?UTF-8?q?=E5=8F=96=E5=99=A8=EF=BC=9A=E7=A7=BB=E9=99=A4=E6=8A=80=E8=83=BD?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=EF=BC=8C=E6=B7=BB=E5=8A=A0Python=E8=84=9A?= =?UTF-8?q?=E6=9C=AC=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bilibili_extractor.py | 155 +++++++++++++++++++++++ notes/BV1N5foBjE5K.md | 45 +++++++ skills/bilibili-extractor/SKILL.md | 191 ----------------------------- 3 files changed, 200 insertions(+), 191 deletions(-) create mode 100644 bilibili_extractor.py create mode 100644 notes/BV1N5foBjE5K.md delete mode 100644 skills/bilibili-extractor/SKILL.md diff --git a/bilibili_extractor.py b/bilibili_extractor.py new file mode 100644 index 0000000..971d239 --- /dev/null +++ b/bilibili_extractor.py @@ -0,0 +1,155 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +B站视频提取脚本 +提取视频信息、统计数据、字幕并生成Markdown笔记 +""" + +import sys +import os +import json +import re +from datetime import datetime + +# 添加skills路径 +sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'skills', 'obsidian-kb')) + +from src.extractors.bilibili_extractor import BilibiliExtractor +from src.config import get_config + + +def format_number(num): + """格式化数字""" + if num >= 100000000: + return f"{num / 100000000:.1f}亿" + elif num >= 10000: + return f"{num / 10000:.1f}万" + else: + return f"{num:,}" + + +def generate_markdown(result, bvid): + """生成Markdown笔记""" + metadata = result['metadata'] + stats = result['stats'] + description = result['description'] + subtitle = result['subtitle'] + + # 获取当前时间 + now = datetime.now().strftime('%Y-%m-%d %H:%M:%S') + + md = f"""# {metadata['title']} + +> **来源**: [B站](https://www.bilibili.com/video/{bvid}) +> **作者**: {metadata['author']} +> **发布时间**: {metadata['pubtime']} +> **提取时间**: {now} +> **时长**: {metadata['duration']} + +## 📊 统计数据 + +| 指标 | 数量 | +|------|------| +| 👀 播放 | {format_number(stats['view'])} | +| 💬 弹幕 | {format_number(stats['danmaku'])} | +| 📝 评论 | {format_number(stats['reply'])} | +| ⭐ 收藏 | {format_number(stats['favorite'])} | +| 🪙 投币 | {format_number(stats['coin'])} | +| 🔗 分享 | {format_number(stats['share'])} | +| 👍 点赞 | {format_number(stats['like'])} | + +## 📝 视频简介 + +{description if description else '(暂无简介)'} + +## 📌 标签 + +{metadata['tags'] if metadata['tags'] else '(无标签)'} + +## 🎬 字幕 + +{subtitle if subtitle else '(无字幕)'} + +--- + +**元数据**: +- BV号: `{metadata['bvid']}` +- AV号: `{metadata['aid']}` +- UP主ID: `{metadata['mid']}` +""" + + return md + + +def main(): + """主函数""" + # BV号 + bvid = "BV1N5foBjE5K" # 从 https://b23.tv/btMGoOi 解析得到 + + print(f"开始提取B站视频: {bvid}") + print("=" * 60) + + # 获取配置 + try: + config = get_config() + except Exception as e: + print(f"⚠️ 获取配置失败,使用默认配置: {e}") + config = None + + # 创建提取器 + extractor = BilibiliExtractor(config=config) + + # 提取视频信息 + try: + result = extractor.extract(bvid) + + print("\n✅ 提取成功!\n") + print("=" * 60) + print("基本信息:") + print("=" * 60) + print(f"标题: {result['metadata']['title']}") + print(f"作者: {result['metadata']['author']}") + print(f"时长: {result['metadata']['duration']}") + print(f"发布: {result['metadata']['pubtime']}") + + print("\n" + "=" * 60) + print("统计数据:") + print("=" * 60) + print(f"播放: {format_number(result['stats']['view'])}") + print(f"弹幕: {format_number(result['stats']['danmaku'])}") + print(f"评论: {format_number(result['stats']['reply'])}") + print(f"收藏: {format_number(result['stats']['favorite'])}") + print(f"投币: {format_number(result['stats']['coin'])}") + print(f"点赞: {format_number(result['stats']['like'])}") + + # 生成 Markdown 笔记 + md_content = generate_markdown(result, bvid) + + # 确保 notes 目录存在 + notes_dir = "/home/admin/.openclaw/workspace/notes" + os.makedirs(notes_dir, exist_ok=True) + + # 生成文件名(使用BV号作为文件名) + filename = f"{bvid}.md" + filepath = os.path.join(notes_dir, filename) + + # 写入文件 + with open(filepath, 'w', encoding='utf-8') as f: + f.write(md_content) + + print("\n" + "=" * 60) + print(f"✅ Markdown笔记已生成: {filepath}") + print("=" * 60) + + # 返回笔记内容 + return md_content + + except Exception as e: + print(f"\n❌ 提取失败: {e}") + import traceback + traceback.print_exc() + return None + + +if __name__ == '__main__': + main() diff --git a/notes/BV1N5foBjE5K.md b/notes/BV1N5foBjE5K.md new file mode 100644 index 0000000..c28bcbc --- /dev/null +++ b/notes/BV1N5foBjE5K.md @@ -0,0 +1,45 @@ +# 【建议收藏】2026 最实用的 Skills 清单 + +> **来源**: [B站](https://www.bilibili.com/video/BV1N5foBjE5K) +> **作者**: 松小鼠呀ya +> **发布时间**: 2026-02-04 20:34:23 +> **提取时间**: 2026-02-07 14:52:30 +> **时长**: 09:29 + +## 📊 统计数据 + +| 指标 | 数量 | +|------|------| +| 👀 播放 | 3,666 | +| 💬 弹幕 | 20 | +| 📝 评论 | 68 | +| ⭐ 收藏 | 379 | +| 🪙 投币 | 126 | +| 🔗 分享 | 45 | +| 👍 点赞 | 159 | + +## 📝 视频简介 + +本频道持续分享创富案例 & AI 前沿应用 +关于投资,会员内容以专题形式呈现,系统梳理从财富认知、全球趋势,到投资理念与实操策略的完整方法论,帮助你构建稳健而清晰的投资思维体系。 +欢迎订阅。 + +热门推荐: +一个人,年入2000万,AI时代怎么创业?拆解他的全部爆款项目:BV1iKbrzhEFt +为什么还没财富自由?90% 的人都卡在这 3 道坎:BV1WkGHz7Ead +【只赚不赔】怎么投资,才能穿越牛熊周期?:BV1mRVbzLEvK + +## 📌 标签 + +(无标签) + +## 🎬 字幕 + +(无字幕) + +--- + +**元数据**: +- BV号: `BV1N5foBjE5K` +- AV号: `116012368270013` +- UP主ID: `689748391` diff --git a/skills/bilibili-extractor/SKILL.md b/skills/bilibili-extractor/SKILL.md deleted file mode 100644 index 694e2d2..0000000 --- a/skills/bilibili-extractor/SKILL.md +++ /dev/null @@ -1,191 +0,0 @@ ---- -name: bilibili-extractor -description: B站视频内容提取工具,使用Playwright + undetected-playwright绕过反爬虫,支持提取视频信息、统计数据、字幕并生成Markdown笔记。 ---- - -# SKILL.md - B站视频内容提取工具 - -## 功能说明 - -这个工具可以从B站(bilibili.com)提取视频内容并生成结构化的Markdown笔记。 - -**核心能力:** -- ✅ 绕过B站极验验证码 -- ✅ 提取视频基本信息(标题、UP主、时长、发布时间) -- ✅ 获取视频统计数据(播放量、点赞、投币、收藏、分享、弹幕、评论) -- ✅ 提取视频字幕(如果有CC字幕) -- ✅ 生成结构化Markdown笔记 - -## 适用场景 - -当用户请求: -- "帮我提取这个B站视频的内容:[链接]" -- "分析这个B站视频:BV号" -- "获取B站视频的字幕" -- "生成B站视频的笔记" - -## 工作原理 - -使用 Playwright + undetected-playwright (stealth_async) 绕过B站的反爬虫检测: -1. 使用stealth模式启动浏览器 -2. 访问B站视频页面 -3. 多策略提取数据(JS变量 → HTML解析 → API备用) -4. 处理验证码(如果触发) -5. 生成Markdown笔记 - -## 使用方法 - -### 方式1:直接运行脚本 - -```bash -cd /home/admin/.openclaw/workspace -./bilibili_venv/bin/python bilibili_extractor.py -``` - -### 方式2:修改视频ID - -编辑 `bilibili_extractor.py` 文件,修改 `bvid` 变量: - -```python -bvid = "BV11t64BJEDZ" # 修改为目标视频的BV号 -``` - -### 方式3:作为子代理任务使用 - -启动子代理处理: - -```python -sessions_spawn( - task="提取B站视频内容:BV11t64BJEDZ", - model="zhipu/glm-4.7" -) -``` - -## 文件位置 - -**主程序:** `/home/admin/.openclaw/workspace/bilibili_extractor.py` - -**虚拟环境:** `/home/admin/.openclaw/workspace/bilibili_venv/` - -**文档:** -- `BILIBILI_EXTRACTOR_README.md` - 完整技术文档 -- `USAGE.md` - 快速使用指南 -- `PROJECT_SUMMARY.md` - 项目总结 - -**输出目录:** `/home/admin/.openclaw/workspace/notes/` - -## 处理验证码 - -如果遇到验证码: - -1. 修改脚本中的 `headless` 参数: -```python -# 改为非headless模式 -browser = p.chromium.launch(headless=False, args=args) -``` - -2. 运行脚本,浏览器会显示,手动完成验证 -3. 验证通过后可以改回 `headless=True` - -## 支持的输入格式 - -- 短链接:`lid6E0m` -- 完整短链接:`https://b23.tv/lid6E0m` -- BV号:`BV11t64BJEDZ` -- 完整视频链接:`https://www.bilibili.com/video/BV11t64BJEDZ` - -## 短链接转换工具 - -如果需要将B站短链接转换为完整链接,可以使用: - -```bash -./scripts/bilibili-short-to-long.sh lid6E0m -``` - -输出:`https://www.bilibili.com/video/BV11t64BJEDZ` - -## 注意事项 - -⚠️ **反爬虫警告:** -- B站可能随时更新反爬虫策略 -- 频繁请求可能导致IP封禁 -- 建议控制请求频率 - -⚠️ **法律风险:** -- 仅用于个人学习 -- 遵守B站服务条款 -- 不要大规模爬取 - -## 故障排除 - -### 问题1:无法绕过验证码 - -**解决方案:** -- 使用非headless模式手动处理验证 -- 更新 undetected-playwright 到最新版本 -- 尝试更换浏览器配置参数 - -### 问题2:页面加载超时 - -**解决方案:** -- 检查网络连接 -- 增加超时时间(修改脚本中的 timeout 参数) -- 使用代理IP - -### 问题3:无法提取字幕 - -**原因:** 目标视频可能没有CC字幕 - -**解决方案:** -- 检查视频是否有字幕 -- 脚本已优雅处理无字幕情况 - -## 技术栈 - -- **Playwright** - 浏览器自动化框架 -- **undetected-playwright** - 反检测插件 -- **BeautifulSoup4** - HTML解析 -- **Python 3.10+** - -## 依赖安装 - -```bash -pip install playwright undetected-playwright beautifulsoup4 requests -playwright install chromium -``` - -(虚拟环境已安装所有依赖) - -## 示例输出 - -生成的Markdown笔记包含: -```markdown -# 时代真变了!glm4.7+playwright cli, AI自主进行自动化测试 - -**UP主**: 录教程的乙醇啦 -**BV号**: BV11t64BJEDZ -**时长**: 04:46 -**发布时间**: 2026-02-01 18:39:58 - -## 视频统计 -- 播放量: 969 -- 点赞: 22 -- 投币: 10 -- 收藏: 72 -- 分享: 15 -- 弹幕: 0 -- 评论: 9 - -## 字幕内容 -(如果有字幕) -... -``` - -## 相关脚本 - -- `scripts/bilibili-short-to-long.sh` - B站短链接转换工具 -- `scripts/install-browser-for-openclaw.sh` - 浏览器环境一键安装脚本 - -## 更多信息 - -查看完整文档:`/home/admin/.openclaw/workspace/BILIBILI_EXTRACTOR_README.md`