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
kb-skills/.planning/phases/08-crawler/08-CONTEXT.md
T

3.0 KiB
Raw Blame History

Phase 8: 内容爬取实现 - Context

Gathered: 2026-03-17 Status: Ready for planning

## Phase Boundary

实现知乎问答、专栏/文章、评论的完整爬取功能,包含网络反爬措施。

此阶段不涉及 Pipeline 整合(Phase 9),只专注于爬虫核心功能。

## Implementation Decisions

爬取方式选择

  • 实现方式: 使用 Playwright 拦截 API 请求
  • 原理: 浏览器访问页面时拦截其发出的 API 请求(如 /api/v4/answers/xxx),直接获取 JSON 响应
  • 优势: 复用浏览器 Cookie,自动处理 x-zse-96 签名,无需逆向
  • 支持内容类型: 问答 (answer)、专栏 (zhuanlan)
  • 不支持: 知乎视频 — 推迟到后续版本

评论爬取范围

  • 爬取范围: 只爬取热门评论
  • 嵌套展开: 不展开回复的回复,只爬第一层评论
  • 可选开关: 评论爬取是可选功能,通过参数控制是否启用

代理配置方式

  • 配置方式: 通过环境变量配置(HTTP_PROXY/HTTPS_PROXY)
  • 配置文件: 添加到 ~/.kb_env,与现有配置方式一致
  • 使用策略: 强制使用代理 — 不配置代理则拒绝爬取,防止 IP 被封

反爬策略

  • 请求频率: 随机延迟,每个请求间隔 1-3 秒
  • 重试策略: 有限重试,失败后重试 3 次,间隔递增
  • 错误处理: 重试全部失败后抛出异常,由上层处理

Claude's Discretion

  • Playwright 拦截的具体实现方式(route/intercept)
  • 热门评论的具体数量限制
  • 重试间隔的具体递增策略
  • 错误提示信息的具体文案

<code_context>

Existing Code Insights

Reusable Assets

  • kb_workflow/auth/zhihu_login.py — ZhihuLogin 类,Cookie 获取和验证逻辑
  • kb_workflow/metadata/zhihu_extractor.py — PlaywrightBrowser 类,浏览器管理
  • kb_workflow/pipeline/config.py — KBSettings 配置类,支持环境变量加载
  • kb_workflow/pipeline/platforms/zhihu.py — ZhihuAdapter 接口定义

Established Patterns

  • 配置管理: pydantic-settings BaseSettings + 环境变量
  • 浏览器管理: PlaywrightBrowser 封装,支持 Cookie 设置
  • API 验证: /api/v4/me 接口验证 Cookie 有效性
  • 错误处理: 自定义 AuthError 异常类

Integration Points

  • 复用 Phase 7 的 Cookie 管理逻辑
  • 复用 PlaywrightBrowser 浏览器管理类
  • 新建 ZhihuCrawler 类处理 API 拦截和内容提取
  • 输出格式与现有 ZhihuAdapter 保持一致

</code_context>

## Specific Ideas
  • API 拦截示例: page.route("**/api/v4/**", handler) 拦截所有 API 请求
  • 热门评论 API: /api/v4/comment_v5/{type}/{id}/comments?order=hot
  • 代理环境变量: HTTP_PROXY=http://127.0.0.1:7890
  • 随机延迟实现: time.sleep(random.uniform(1, 3))
## Deferred Ideas

None — discussion stayed within phase scope


Phase: 08-crawler Context gathered: 2026-03-17