3.0 KiB
3.0 KiB
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))
None — discussion stayed within phase scope
Phase: 08-crawler Context gathered: 2026-03-17