188 lines
5.9 KiB
Markdown
188 lines
5.9 KiB
Markdown
# 知乎 DrissionPage 提取器 - 实施计划
|
||
|
||
**目标:** 用 DrissionPage 完全替换 Playwright,实现稳定可靠的知乎内容提取
|
||
|
||
**方案:** 使用 DrissionPage + Cookie 文件方案(从其他机器导出的 JSON 格式 Cookie)
|
||
|
||
**预计总耗时:** 45 分钟
|
||
|
||
---
|
||
|
||
## Checkpoint 1: 安装 DrissionPage 和更新依赖
|
||
|
||
- [ ] Task 1.1: 安装 DrissionPage 库 (~2 min)
|
||
- **Action:** 在虚拟环境中安装 `DrissionPage`
|
||
- **Verify:** `import DrissionPage` 无报错
|
||
|
||
- [ ] Task 1.2: 更新 requirements.txt (~1 min)
|
||
- **Action:** 添加 `DrissionPage>=4.0.0` 到 requirements.txt
|
||
- **Verify:** 文件中包含 DrissionPage 依赖
|
||
|
||
- [ ] Task 1.3: 验证 DrissionPage 基本功能 (~2 min)
|
||
- **Action:** 创建测试脚本验证 DrissionPage 能正常启动浏览器
|
||
- **Verify:** 测试脚本运行成功,能创建页面对象
|
||
|
||
---
|
||
|
||
## Checkpoint 2: 创建 DrissionPage 提取器
|
||
|
||
- [ ] Task 2.1: 创建 ZhihuDrissionExtractor 类框架 (~3 min)
|
||
- **Action:** 创建 `src/sources/zhihu_drission_extractor.py`,定义类结构和初始化方法
|
||
- **Verify:** 文件创建成功,类能正常实例化
|
||
|
||
- [ ] Task 2.2: 实现 Cookie 加载逻辑 (~5 min)
|
||
- **Action:** 实现三种 Cookie 加载方式(文件/环境变量/配置),优先级:配置 > 环境 > 文件
|
||
- **Verify:** 能正确读取 JSON 格式的 Cookie 文件并应用到浏览器
|
||
|
||
- [ ] Task 2.3: 实现浏览器管理器 (~4 min)
|
||
- **Action:** 实现浏览器启动、关闭、页面导航等基础操作
|
||
- **Verify:** 能成功启动浏览器并访问知乎首页
|
||
|
||
- [ ] Task 2.4: 实现回答内容提取 (~5 min)
|
||
- **Action:** 实现知乎回答页面的标题、作者、内容、时间、点赞数提取
|
||
- **Verify:** 能正确提取知乎回答的所有元数据
|
||
|
||
- [ ] Task 2.5: 实现文章内容提取 (~4 min)
|
||
- **Action:** 实现知乎文章页面的元数据提取
|
||
- **Verify:** 能正确提取知乎文章的所有元数据
|
||
|
||
- [ ] Task 2.6: 实现问题内容提取 (~3 min)
|
||
- **Action:** 实现知乎问题页面的元数据提取
|
||
- **Verify:** 能正确提取知乎问题的所有元数据
|
||
|
||
- [ ] Task 2.7: 实现 Markdown 转换集成 (~3 min)
|
||
- **Action:** 集成现有的 MarkdownConverter,将 HTML 转为 Markdown
|
||
- **Verify:** 输出的 Markdown 格式完整,保留代码块、表格等格式
|
||
|
||
---
|
||
|
||
## Checkpoint 3: 集成到 ZhihuSource
|
||
|
||
- [ ] Task 3.1: 修改 ZhihuSource.get_transcript() (~5 min)
|
||
- **Action:** 移除 Playwright 逻辑,改为调用 DrissionPage 提取器
|
||
- **Verify:** ZhihuSource 能正常调用 DrissionPage 提取器
|
||
|
||
- [ ] Task 3.2: 移除旧的 Playwright 依赖 (~2 min)
|
||
- **Action:** 移除 `zhihu.py` 中的 Playwright 导入和相关代码
|
||
- **Verify:** 代码中不再有 Playwright 相关导入
|
||
|
||
---
|
||
|
||
## Checkpoint 4: 更新配置文件
|
||
|
||
- [ ] Task 4.1: 更新 config.yaml 添加 DrissionPage 配置 (~3 min)
|
||
- **Action:** 在 `config.yaml` 中添加 zhihu.drissionpage 配置节
|
||
- **Verify:** 配置文件中包含 DrissionPage 相关配置项
|
||
|
||
- [ ] Task 4.2: 更新 Config 类支持新配置 (~3 min)
|
||
- **Action:** 在 `src/config.py` 中添加 DrissionPage 配置的属性访问方法
|
||
- **Verify:** Config 类能正确读取 DrissionPage 配置
|
||
|
||
---
|
||
|
||
## Checkpoint 5: 更新文档
|
||
|
||
- [ ] Task 5.1: 更新 SKILL.md 文档 (~4 min)
|
||
- **Action:** 添加 DrissionPage 方案说明、配置方法、使用示例
|
||
- **Verify:** 文档中清晰说明 DrissionPage 方案的使用方法
|
||
|
||
- [ ] Task 5.2: 更新 README.md 文档 (~3 min)
|
||
- **Action:** 更新知乎提取章节,说明 DrissionPage 方案的优势
|
||
- **Verify:** README 中正确反映当前实现方案
|
||
|
||
---
|
||
|
||
## Checkpoint 6: 测试和验证
|
||
|
||
- [ ] Task 6.1: 创建测试脚本 (~3 min)
|
||
- **Action:** 创建测试脚本,使用真实知乎链接测试提取功能
|
||
- **Verify:** 测试脚本能运行并输出结果
|
||
|
||
- [ ] Task 6.2: 验证 Cookie 加载 (~3 min)
|
||
- **Action:** 创建测试 Cookie 文件,验证能正确加载和应用
|
||
- **Verify:** Cookie 能正确加载并应用到浏览器
|
||
|
||
- [ ] Task 6.3: 验证三种内容类型提取 (~5 min)
|
||
- **Action:** 分别测试回答、文章、问题三种类型的提取
|
||
- **Verify:** 三种类型都能正确提取,输出格式正确
|
||
|
||
- [ ] Task 6.4: 验证错误处理 (~3 min)
|
||
- **Action:** 测试无效 URL、网络错误、Cookie 过期等场景
|
||
- **Verify:** 错误场景下能正确处理并返回有意义的错误信息
|
||
|
||
---
|
||
|
||
## Verification Criteria
|
||
|
||
- [ ] 所有 Checkpoint 任务完成
|
||
- [ ] DrissionPage 提取器能正常工作
|
||
- [ ] Cookie 加载功能正常
|
||
- [ ] 三种知乎内容类型都能正确提取
|
||
- [ ] 输出格式完整(Markdown)
|
||
- [ ] 错误处理完善
|
||
- [ ] 文档更新完整
|
||
- [ ] 测试通过
|
||
|
||
---
|
||
|
||
## Cookie 文件格式说明
|
||
|
||
**JSON 格式(浏览器导出):**
|
||
```json
|
||
[
|
||
{
|
||
"name": "z_c0",
|
||
"value": "xxx",
|
||
"domain": ".zhihu.com",
|
||
"path": "/",
|
||
"expiry": 1234567890,
|
||
"secure": true,
|
||
"httpOnly": false
|
||
},
|
||
{
|
||
"name": "d_c0",
|
||
"value": "yyy",
|
||
"domain": ".zhihu.com",
|
||
"path": "/",
|
||
"expiry": 1234567890,
|
||
"secure": true,
|
||
"httpOnly": false
|
||
}
|
||
]
|
||
```
|
||
|
||
**配置方式:**
|
||
```yaml
|
||
zhihu:
|
||
enabled: true
|
||
use_drissionpage: true
|
||
cookie_file: ~/.obsidian-kb/zhihu_cookies.json # Cookie 文件路径
|
||
cookie_str: "" # 可选:直接在配置中填入
|
||
timeout: 30
|
||
headless: true
|
||
```
|
||
|
||
---
|
||
|
||
## 注意事项
|
||
|
||
1. **Cookie 获取方式:**
|
||
- 在有浏览器的机器上登录知乎
|
||
- 打开开发者工具 (F12)
|
||
- 进入 Application → Cookies → https://www.zhihu.com
|
||
- 导出所有 Cookie 为 JSON 文件
|
||
- 上传到服务器指定路径
|
||
|
||
2. **Cookie 有效期:**
|
||
- 知乎 Cookie 通常有效期为几天到几周
|
||
- 过期后需要重新导出 Cookie 文件
|
||
|
||
3. **无头模式:**
|
||
- 服务器环境无桌面,必须使用 headless 模式
|
||
- DrissionPage 默认支持 headless 模式
|
||
|
||
---
|
||
|
||
**计划创建时间:** 2026-02-08 05:45
|
||
**下一步:** 选择执行方式(单代理或多代理并行)
|