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

243 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 创建虚拟环境
```bash
python3 -m venv bilibili_venv
source bilibili_venv/bin/activate
```
### 2. 安装依赖
```bash
pip install playwright undetected-playwright beautifulsoup4 lxml
```
### 3. 安装浏览器
```bash
playwright install chromium
```
## 使用方法
### 基本用法
```bash
# 无头模式(推荐,速度更快)
python bilibili_extractor.py
# 如果需要处理验证码,修改脚本中的 headless=False
python bilibili_extractor.py
```
### 自定义视频
编辑脚本中的 `bvid` 变量:
```python
bvid = "BV11t64BJEDZ" # 改为你想提取的视频BV号
```
### 自定义输出路径
编辑脚本中的 `output_file` 变量:
```python
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模式实现
```python
from undetected_playwright import stealth_async
# 应用stealth模式
await stealth_async(context)
```
### 多策略数据提取
```python
# 方法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})
```
### 验证码处理
```python
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** 是一个强大且稳定的反爬虫解决方案!