This repository has been archived on 2026-08-07. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw/agents/haonan/workspace/memory/plans/zhihu-drissionpage-implementation.md
T
2026-02-15 00:36:24 +08:00

5.9 KiB
Raw Blame History

知乎 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)
  • 错误处理完善
  • 文档更新完整
  • 测试通过

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
  }
]

配置方式:

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