Skip to content

Analyze Zhihu question replies and responses#2

Open
sharpHL wants to merge 7 commits intomainfrom
claude/zhihu-reply-analyzer-01QC98PNghPFWSErFMkpwjfm
Open

Analyze Zhihu question replies and responses#2
sharpHL wants to merge 7 commits intomainfrom
claude/zhihu-reply-analyzer-01QC98PNghPFWSErFMkpwjfm

Conversation

@sharpHL
Copy link
Owner

@sharpHL sharpHL commented Nov 16, 2025

No description provided.

实现了完整的知乎问题回答分析工具,包含以下功能:

## 核心功能
1. 使用 Playwright 爬取知乎问题下的所有回答
2. 按发布时间倒序排列回答
3. 使用 Claude AI 多维度分析回答价值
4. 生成详细的分析报告

## 技术方案
- **爬虫**: Playwright 浏览器自动化
  - 模拟真实浏览器行为
  - 滚动加载所有回答
  - 提取回答内容、作者、时间、点赞等信息

- **AI分析**: Claude 3.5 Sonnet API
  - 5个维度评分(深度、准确性、实用性、完整性、表达质量)
  - 生成优缺点分析
  - 输出价值摘要

## 文件结构
- zhihu-scraper.js: 知乎爬虫模块
- answer-analyzer.js: AI分析模块
- zhihu-analyzer.js: 主程序(整合爬虫和分析)
- test-scraper.js: 测试脚本(无需API key)
- README.md: 项目文档
- USAGE.md: 详细使用指南
- package.json: 依赖管理

## 使用方法
```bash
npm install
npx playwright install chromium
export ANTHROPIC_API_KEY=your-api-key
node zhihu-analyzer.js https://www.zhihu.com/question/490365386
```

## 输出
- answers.json: 原始回答数据
- analysis.json: AI分析结果
- report.md: Markdown格式的分析报告
完善知乎登录功能,确保能够获取完整的回答内容。

## 新增功能

### 1. Cookie 管理系统
- 新增 `cookie-manager.js`: 完整的 Cookie 管理模块
  - 加载和保存 Cookie
  - Cookie 验证和应用
  - 支持多种 Cookie 格式导入
  - Cookie 信息查询

### 2. 自动登录工具
- 新增 `login-zhihu.js`: 交互式登录工具
  - 自动打开浏览器供用户登录
  - 自动提取并保存 Cookie
  - 登录状态验证
  - Cookie 有效性测试

### 3. Cookie 获取指南
- 新增 `COOKIE_GUIDE.md`: 详细的 Cookie 获取文档
  - 3种获取方法(自动工具/浏览器插件/开发者工具)
  - 完整的步骤说明和截图
  - 常见问题解答
  - 故障排除指南

## 功能增强

### 爬虫模块更新
- `zhihu-scraper.js` 支持 Cookie 管理
  - 自动加载已保存的 Cookie
  - 登录状态检测和提示
  - 使用 browser context 管理会话

### 配置更新
- `package.json`: 添加 `npm run login` 命令
- `.gitignore`: 忽略 Cookie 文件(安全)

### 文档更新
- `README.md`:
  - 添加登录步骤说明
  - 新增 Cookie 相关注意事项
  - 添加登录相关故障排除

## 使用方法

```bash
# 首次使用:登录知乎
npm run login

# 在浏览器中完成登录后,按回车保存 Cookie

# 正常使用(会自动使用已保存的 Cookie)
node zhihu-analyzer.js <问题URL>
```

## 技术细节

- Cookie 存储在 `.zhihu-cookies.json`(已加入 .gitignore)
- 支持自动检测登录状态
- Cookie 过期时会提示重新登录
- 兼容多种 Cookie 导入格式

## 安全性

- Cookie 文件不会被提交到版本控制
- Cookie 包含敏感登录信息,需妥善保管
- 建议定期更换 Cookie
实现了完整的 AI 服务抽象层,支持 Claude 和 Gemini 两种 AI 服务,使用 dotenv 管理配置。

## 核心功能

### 1. dotenv 环境变量管理
- 安装 dotenv 依赖
- 所有配置通过 .env 文件管理
- 支持环境变量覆盖
- 更新 .env.example 提供完整配置模板

### 2. AI 服务抽象层
**新增目录**: `ai-providers/`

- `base-provider.js`: AI 分析器基类
  - 统一接口定义
  - 通用提示词构建
  - JSON 响应解析
  - 错误处理

- `claude-provider.js`: Claude AI 实现
  - 支持所有 Claude 模型
  - Anthropic SDK 集成
  - 稳定的 JSON 输出

- `gemini-provider.js`: Gemini AI 实现
  - 支持所有 Gemini 模型
  - Google Generative AI SDK 集成
  - 免费额度支持

- `index.js`: AI 提供商工厂
  - 根据配置自动创建提供商
  - 从环境变量初始化
  - 模型信息查询

### 3. 支持的 AI 服务

**Claude (Anthropic)**
- claude-3-5-sonnet-20241022(默认)
- claude-3-haiku-20240307
- claude-3-opus-20240229

**Gemini (Google)**
- gemini-1.5-flash(默认,免费)
- gemini-1.5-pro
- gemini-pro

### 4. 配置方式

**.env 文件配置**:
```bash
AI_PROVIDER=claude  # 或 gemini
ANTHROPIC_API_KEY=your-claude-key
GEMINI_API_KEY=your-gemini-key
AI_MODEL=claude-3-5-sonnet-20241022  # 可选
MAX_ANALYZE=20
```

**环境变量配置**:
```bash
export AI_PROVIDER=gemini
export GEMINI_API_KEY=your-key
```

## 代码更新

### answer-analyzer.js
- 完全重构,使用 AI 提供商抽象
- 自动从环境变量创建 AI 实例
- 显示当前使用的 AI 和模型
- 在报告中标注使用的 AI

### zhihu-analyzer.js
- 添加 dotenv 配置加载
- 自动传递 AI 配置

### package.json
- 新增依赖:dotenv, @google/generative-ai
- 保持向后兼容

## 文档

### AI_CONFIG_GUIDE.md(新增)
详细的 AI 配置指南:
- 两种 AI 服务对比
- API Key 获取步骤
- 模型选择建议
- 成本估算
- 配置示例
- 常见问题解答

### README.md(更新)
- 更新功能特性(多 AI 支持)
- 更新前置要求
- 更新 API Key 配置说明
- 添加两种 AI 的配置方式

### .env.example(更新)
- 清晰的配置分组
- 详细的注释说明
- 支持两种 AI 的配置
- 可选模型配置

## 使用示例

### 使用 Claude
```bash
# .env
AI_PROVIDER=claude
ANTHROPIC_API_KEY=sk-ant-xxx

node zhihu-analyzer.js <URL>
```

### 使用 Gemini(免费)
```bash
# .env
AI_PROVIDER=gemini
GEMINI_API_KEY=AIzaSy-xxx

node zhihu-analyzer.js <URL>
```

### 切换 AI
只需修改 .env 中的 AI_PROVIDER,无需修改代码。

## 技术优势

1. **插件化架构**: 轻松添加新的 AI 服务
2. **配置集中**: 所有配置在 .env 文件中管理
3. **类型安全**: 统一的接口定义
4. **错误处理**: 完善的降级机制
5. **成本优化**: 可选择免费的 Gemini 服务

## 向后兼容

- 保留原有的 ANTHROPIC_API_KEY 环境变量支持
- 默认使用 Claude(如未指定 AI_PROVIDER)
- 原有代码无需修改即可工作
- 添加多选择器支持,提高爬取成功率
- 创建 debug-zhihu.js 诊断工具
- 创建 TROUBLESHOOTING.md 故障排除指南
- 改进错误提示和日志输出
知乎有严格的反爬虫机制,添加多种应对方案:

## 新增功能

### 1. 本地 HTML 解析器(推荐方案)
- parse-local-html.js: 解析手动保存的HTML文件
- 100% 可靠,完全绕过反爬虫
- 支持 cheerio 和 jsdom 解析
- 自动提取回答、点赞、评论等数据
- 按时间排序和统计分析

### 2. Stealth 爬虫(备选方案)
- zhihu-scraper-stealth.js: 使用反反爬虫技术
- playwright-extra + stealth 插件
- 隐藏 WebDriver 特征
- 模拟人类行为(随机延迟、鼠标移动)
- 先访问首页再访问目标页面

### 3. 调试工具增强
- debug-zhihu.js: 多选择器检测
- 截图保存功能
- 详细的诊断信息

## 文档

### ANTI_CRAWLER_GUIDE.md(新增)
完整的反爬虫应对指南:
- 3种方案对比(可靠性、难度、速度)
- 详细使用步骤
- 故障排除
- 最佳实践
- 技术原理解释

### README.md(更新)
- 添加反爬虫警告
- 推荐使用本地 HTML 解析
- 更新功能特性列表

### package.json(更新)
- 新增依赖:cheerio, jsdom, playwright-extra, stealth
- 新增脚本:parse-html, debug
- 更新依赖列表

## 使用方法

### 推荐方案(本地 HTML)

> zhihu-answer-analyzer@1.0.0 parse-html
> node parse-local-html.js zhihu-question.html

> zhihu-answer-analyzer@1.0.0 analyze
> node answer-analyzer.js

[dotenv@17.2.3] injecting env (0) from .env -- tip: ✅ audit secrets and track compliance: https://dotenvx.com/ops
[dotenv@17.2.3] injecting env (0) from .env -- tip: ⚙️  suppress all logs with { quiet: true }

### 备选方案(Stealth爬虫)
========================================
   知乎登录工具
========================================

正在启动浏览器...

## 技术亮点

1. **多层防护绕过**:
   - 覆盖 navigator.webdriver
   - 隐藏自动化特征
   - 添加浏览器指纹
   - 模拟人类行为

2. **灵活选择器**:
   - 支持多个备选选择器
   - 自动检测可用选择器
   - 适应页面结构变化

3. **完整数据提取**:
   - 作者、内容、时间
   - 点赞、评论、收藏
   - 内容长度统计

## 警告

- 知乎反爬虫非常严格
- 自动化爬虫容易被检测
- 强烈推荐使用本地 HTML 解析
- 仅用于个人学习研究
解决Cookie数量过多但登录失败的问题

核心改进:
1. 新增Cookie诊断工具 (diagnose-cookies.js)
   - 分析Cookie质量和数量
   - 识别知乎vs非知乎Cookie
   - 检查关键Cookie (z_c0, _zap, d_c0, _xsrf)
   - 检测过期Cookie
   - 提供自动清理功能 (--cleanup)
   - 显示域名统计

2. 增强Cookie管理器 (cookie-manager.js)
   - 新增filterCookies()方法
   - 自动过滤非知乎域名Cookie
   - 自动删除过期Cookie
   - 验证关键Cookie存在性
   - 应用前自动过滤
   - 显示有效Cookie信息

3. 完善文档
   - COOKIE_FIX_GUIDE.md: Cookie问题修复完整指南
   - COOKIE_UPDATE.md: 更新说明和使用流程
   - 更新README.md: 添加诊断工具说明

4. 添加npm脚本
   - npm run diagnose: Cookie诊断
   - npm run diagnose -- --cleanup: 自动清理

技术细节:
- 只保留zhihu.com域名的Cookie
- 检查Cookie过期时间 (expires字段)
- 验证Cookie值非空
- 从26个Cookie精简到4-8个有效Cookie
- 自动备份原Cookie文件

使用方法:
1. 诊断: npm run diagnose
2. 清理: npm run diagnose -- --cleanup
3. 重新登录: npm run login

相关问题: Cookie数量过多、包含其他网站Cookie、登录失败
解决用户报告的"网络异常"问题

核心问题:
- SSL证书验证失败 (ERR_CERT_AUTHORITY_INVALID)
- 网络超时
- 页面加载策略不佳

解决方案:
1. 自动忽略SSL证书错误
   - 添加 --ignore-certificate-errors 浏览器参数
   - 添加 ignoreHTTPSErrors: true 上下文配置
   - 适用于企业网络、MITM证书等环境

2. 优化页面加载策略
   - 从 networkidle 改为 domcontentloaded(更快更可靠)
   - 增加超时时间:60秒 → 90秒
   - 减少网络等待时间

3. 更新的文件
   - login-zhihu.js: 登录工具(主要)
   - zhihu-scraper.js: 主爬虫
   - debug-zhihu.js: 调试工具
   - 所有工具统一配置

4. 新增工具
   - test-network.js: 网络连接诊断工具
   - login-zhihu-fixed.js: 增强版登录工具(备用)
   - NETWORK_FIX.md: 完整的网络问题修复指南

5. 添加npm脚本
   - npm run test-network: 测试网络连接

技术细节:
- 浏览器启动args添加证书忽略
- context配置ignoreHTTPSErrors
- waitUntil策略从networkidle改为domcontentloaded
- timeout从60s增加到90s

测试步骤:
1. npm run test-network (测试网络)
2. npm run login (登录知乎)
3. 如果仍失败,使用本地HTML解析

文档更新:
- README.md: 添加网络异常故障排除
- NETWORK_FIX.md: 详细的修复指南

相关问题: 网络异常、SSL证书、ERR_CERT_AUTHORITY_INVALID
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants