docs(08): capture phase context for crawler implementation
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
# Phase 8: 内容爬取实现 - Context
|
||||
|
||||
**Gathered:** 2026-03-17
|
||||
**Status:** Ready for planning
|
||||
|
||||
<domain>
|
||||
## Phase Boundary
|
||||
|
||||
实现知乎问答、专栏/文章、评论的完整爬取功能,包含网络反爬措施。
|
||||
|
||||
此阶段不涉及 Pipeline 整合(Phase 9),只专注于爬虫核心功能。
|
||||
|
||||
</domain>
|
||||
|
||||
<decisions>
|
||||
## 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)
|
||||
- 热门评论的具体数量限制
|
||||
- 重试间隔的具体递增策略
|
||||
- 错误提示信息的具体文案
|
||||
|
||||
</decisions>
|
||||
|
||||
<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>
|
||||
|
||||
<specifics>
|
||||
## 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))`
|
||||
|
||||
</specifics>
|
||||
|
||||
<deferred>
|
||||
## Deferred Ideas
|
||||
|
||||
None — discussion stayed within phase scope
|
||||
|
||||
</deferred>
|
||||
|
||||
---
|
||||
|
||||
*Phase: 08-crawler*
|
||||
*Context gathered: 2026-03-17*
|
||||
Reference in New Issue
Block a user