# 知乎 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 **下一步:** 选择执行方式(单代理或多代理并行)