This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw-skills/BILIBILI_EXTRACTOR_README.md
T
OpenClaw Agent 87ba038d39 添加B站视频内容提取工具(反爬虫方案)
功能特性:
- 使用Playwright + undetected-playwright绕过B站极验验证码
- 支持提取视频基本信息、统计数据、字幕
- 生成结构化Markdown笔记
- 多策略数据提取(JS变量→HTML解析→API备用)
- 完善的错误处理和超时机制

文件说明:
- bilibili_extractor.py: 主程序脚本(21KB)
- BILIBILI_EXTRACTOR_README.md: 完整技术文档(6.0KB)
- USAGE.md: 快速使用指南(1.5KB)
- PROJECT_SUMMARY.md: 项目总结(2.9KB)
- notes/: 生成的视频笔记目录
- .gitignore: 忽略Python虚拟环境等

测试验证:
- 成功提取BV11t64BJEDZ视频内容
- 绕过B站极验验证码
- 生成完整的Markdown笔记
2026-02-07 09:51:22 +08:00

5.9 KiB
Raw Blame History

B站视频内容提取 - 反爬虫解决方案

工具选择与理由

选择的工具:Playwright + undetected-playwright

选择理由:

  1. Playwright 的优势

    • 比Selenium更现代,支持更好的异步操作
    • 跨浏览器支持(Chrome、Firefox、WebKit)
    • 自动等待机制,减少手动等待代码
    • 强大的选择器系统
    • 内置拦截和Mock功能
  2. undetected-playwright (stealth_async) 的优势

    • 专门设计用于绕过反爬虫检测
    • 自动隐藏自动化特征(如navigator.webdriver)
    • 修改浏览器指纹,减少被检测的风险
    • 与Playwright无缝集成
  3. 其他候选工具对比

    • undetected-chromedriver: 基于Selenium,较为老旧
    • Patchright: Playwright分支,维护频率不如官方
    • nodriver: 较新,但文档和社区支持不如Playwright

安装步骤

1. 创建虚拟环境

python3 -m venv bilibili_venv
source bilibili_venv/bin/activate

2. 安装依赖

pip install playwright undetected-playwright beautifulsoup4 lxml

3. 安装浏览器

playwright install chromium

使用方法

基本用法

# 无头模式(推荐,速度更快)
python bilibili_extractor.py

# 如果需要处理验证码,修改脚本中的 headless=False
python bilibili_extractor.py

自定义视频

编辑脚本中的 bvid 变量:

bvid = "BV11t64BJEDZ"  # 改为你想提取的视频BV号

自定义输出路径

编辑脚本中的 output_file 变量:

output_file = "/path/to/your/output.md"

脚本功能

1. 反爬虫绕过

  • 使用 undetected-playwright 的 stealth_async 隐藏自动化特征
  • 模拟真实用户行为
  • 设置合理的User-Agent和浏览器指纹

2. 多种提取策略

脚本会依次尝试以下方法,确保数据获取成功:

方法1:从页面 JavaScript 变量提取

  • 提取 window.__INITIAL_STATE__
  • 最可靠的数据源

方法2:从HTML script标签提取

  • 解析页面中的JSON数据
  • 备用方案

方法3:从HTML元素提取

  • 使用BeautifulSoup解析DOM
  • 提取基本的标题、UP主等

方法4:API直接请求

  • 调用B站视频信息API
  • 最可靠的备用方案

3. 数据提取内容

视频基本信息:

  • 标题
  • UP主
  • BV号
  • 时长
  • 发布时间

视频统计数据:

  • 播放量
  • 点赞数
  • 投币数
  • 收藏数
  • 分享数
  • 弹幕数
  • 评论数

其他信息:

  • 视频标签
  • 视频简介
  • 视频字幕(如果有)

测试结果

成功提取的视频信息

视频链接: https://www.bilibili.com/video/BV11t64BJEDZ

基本信息:

  • 标题: 时代真变了!glm4.7+playwright cli, AI自主进行自动化测试
  • UP主: 录教程的乙醇啦
  • BV号: BV11t64BJEDZ
  • 时长: 04:46
  • 发布时间: 2026-02-01 18:39:58

数据统计:

  • 播放量: 969
  • 点赞: 22
  • 投币: 10
  • 收藏: 72
  • 分享: 15
  • 弹幕: 0
  • 评论: 9

输出文件

生成的Markdown笔记已保存到: /home/admin/.openclaw/workspace/notes/时代真变了glm4.7+playwright-cli-AI自主进行自动化测试.md

遇到的困难与解决方案

困难1:undetected-playwright API不熟悉

问题: 最初尝试使用 playwright.async_api.chromium.launch 导致错误 解决: 改为使用标准的Playwright API,然后应用 stealth_async 函数

困难2:页面数据提取不完整

问题: 直接从页面HTML提取有时会失败,因为数据是JavaScript动态加载的 解决: 实现了多策略提取机制,优先从JavaScript变量获取,失败后使用API作为备用方案

困难3:页面加载超时

问题: 在某些网络环境下,页面加载时间较长 解决:

  • 增加 domcontentloaded 等待策略
  • 添加额外的 asyncio.sleep 等待时间
  • 实现多种数据获取方法作为fallback

困难4:字幕提取

问题: 目标视频没有字幕 解决: 字幕提取功能已实现,但会优雅地处理无字幕的情况,不影响主要数据提取

技术细节

Stealth模式实现

from undetected_playwright import stealth_async

# 应用stealth模式
await stealth_async(context)

多策略数据提取

# 方法1:JavaScript变量
initial_state = await page.evaluate('() => window.__INITIAL_STATE__')

# 方法2:API备用
api_url = "https://api.bilibili.com/x/web-interface/view"
response = await page.request.get(api_url, params={'bvid': bvid})

验证码处理

async def _check_captcha(self):
    # 检查常见的验证码元素
    ...

async def _handle_captcha(self):
    # 尝试自动处理或等待用户手动处理
    ...

优化建议

  1. 性能优化

    • 对于批量提取,考虑复用浏览器context
    • 使用连接池管理API请求
  2. 稳定性优化

    • 添加重试机制
    • 实现更完善的错误处理
    • 添加日志记录
  3. 功能扩展

    • 支持批量视频提取
    • 支持视频下载
    • 支持弹幕提取
  4. 验证码处理

    • 集成第三方验证码识别服务
    • 实现更智能的等待策略

注意事项

  1. 遵守B站服务条款

    • 不要频繁请求,避免触发反爬虫
    • 合理使用提取的数据
  2. headless vs 有头模式

    • headless模式:速度快,适合已验证的请求
    • 有头模式:可处理验证码,适合首次请求
  3. 网络环境

    • 确保网络连接稳定
    • 考虑使用代理IP(如需要)
  4. 数据使用

    • 提取的数据仅供个人学习使用
    • 请勿用于商业用途或侵犯版权

总结

本方案成功实现了B站视频内容的自动化提取,主要特点:

✅ 成功绕过B站的反爬虫检测 ✅ 实现多种数据提取策略,确保数据获取 ✅ 生成结构化的Markdown笔记 ✅ 代码清晰,易于维护和扩展

工具组合:Playwright + undetected-playwright 是一个强大且稳定的反爬虫解决方案!