一个强大的知乎问题爬虫工具,支持AI代理和手动浏览器两种模式,能够高效抓取知乎问题及其所有回答。使用先进的浏览器自动化和反检测技术,有效绕过知乎的防爬机制。
- 双模式爬取
- 🤖 AI代理模式: 利用大型语言模型控制浏览器(基于browser-use库)
- 🌐 手动浏览器模式: 直接使用Playwright控制浏览器,更可靠但较慢
- 多种LLM支持
- 支持OpenAI、DeepSeek、Anthropic Claude、Google Gemini等多种模型
- 自动适配可用的API密钥
- 登录支持
- 通过Cookie实现登录,获取完整内容(包括登录后才能查看的内容)
- 内置登录命令,方便保存登录状态
- 智能Cookie处理,自动生成必要参数
- 高级反检测
- 内置多种浏览器指纹伪装技术
- 模拟人类行为的浏览模式
- WebGL、Canvas、AudioContext等多维度指纹修改
- 数据存储
- 自动保存为Markdown格式
- 按点赞数排序,便于查找高质量内容
- 智能合并多个回答,减少文件数量
- 用户友好
- 支持命令行和API两种使用方式
- 详细的日志输出,便于排查问题
- Python 3.11+ (browser-use库的要求)
- 操作系统: Windows、macOS或Linux
- 内存: 建议4GB以上
- 网络: 稳定的互联网连接
- 存储: 取决于抓取内容的多少
# 安装基本依赖
pip install zhihu-scraper
# 安装AI代理模式所需的额外依赖
pip install zhihu-scraper[ai]
# 安装Playwright浏览器
playwright install# 克隆仓库
git clone https://github.com/yourusername/zhihu-scraper.git
cd zhihu-scraper
# 安装依赖
pip install -e . # 安装基本依赖
pip install -e ".[ai]" # 安装AI代理模式所需的额外依赖
# 安装Playwright浏览器
playwright install创建.env文件并配置以下参数(可选但推荐):
# API密钥(选择一个配置)
OPENAI_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
# Anthropic Claude模型
# ANTHROPIC_API_KEY=sk-ant-xxxxxxxxxxxx
# Azure OpenAI服务
# AZURE_OPENAI_ENDPOINT=https://xxxx.openai.azure.com
# AZURE_OPENAI_KEY=xxxxxxxxxxxxxxxx
# Gemini模型
# GOOGLE_API_KEY=xxxxxxxxxxxxxxxx
# DeepSeek模型
# DEEPSEEK_API_KEY=xxxxxxxxxxxxxxxx
# 禁用telemetry(可选)
ANONYMIZED_TELEMETRY=false现在,zhihu-scraper 工具支持多种子命令:
# 登录知乎(保存登录状态)
zhihu-scraper login
# 设置登录超时时间(单位:秒)
zhihu-scraper login --timeout 600
# 指定浏览器数据存储目录
zhihu-scraper login --user-data-dir ~/my-zhihu-profile# 爬取问题(AI代理模式,需要提前登录)
zhihu-scraper scrape 537377466
# 使用手动浏览器模式(更可靠但较慢)
zhihu-scraper scrape 537377466 --manual
# 指定API密钥和模型
zhihu-scraper scrape 537377466 --api-key sk-xxx --model gpt-4o
# 使用DeepSeek模型
zhihu-scraper scrape 537377466 --model deepseek-chat --api-key sk-xxx
# 指定输出目录
zhihu-scraper scrape 537377466 --output ./my_data
# 使用Cookie进行登录
zhihu-scraper scrape 537377466 --cookie "z_c0=xxx; _xsrf=xxx"
# 使用之前保存的登录状态(指定相同的user-data-dir)
zhihu-scraper scrape 537377466 --user-data-dir ~/my-zhihu-profile# 兼容旧版本的命令格式(无需子命令)
zhihu-scraper 537377466
zhihu-scraper 537377466 --manualimport asyncio
from zhihu_scraper import ZhihuBrowserScraper
async def main():
# 初始化爬虫
scraper = ZhihuBrowserScraper(
api_key="sk-xxx", # API密钥(AI代理模式需要)
model_name="gpt-4o", # 使用的模型
zhihu_cookie="z_c0=xxx; _xsrf=xxx" # 可选Cookie
)
# 抓取问题
result = await scraper.scrape_question(
question_id="537377466", # 可以是URL或ID
output_dir="output",
manual_mode=False # 使用AI代理模式
)
print(f"共获取到 {result} 个回答")
if __name__ == "__main__":
asyncio.run(main())抓取的内容将保存在指定的输出目录中(默认为output/问题ID/),包括:
output/537377466/
├── 问题详情.md # 问题标题和描述
├── 回答集合_01.md # 第1-10个回答
├── 回答集合_02.md # 第11-20个回答
└── ... # 更多回答文件
问题: 出现API密钥无效或未找到API密钥错误。
解决: 确保在.env文件或命令行参数中提供了有效的API密钥。不同的模型需要不同的API密钥。
问题: 安装时出现Could not find a version that satisfies the requirement。
解决: 确保Python版本≥3.11,可以使用python --version查看版本。
问题: 只能获取未登录可见的内容。
解决: 使用 zhihu-scraper login 命令进行手动登录,保存登录状态后再运行爬虫命令。
问题: 出现Browser launch failed错误。
解决: 运行playwright install安装浏览器,或确保系统中有可用的Chromium浏览器。
欢迎贡献代码和提出建议:
# 安装开发依赖
pip install -e ".[dev]"
# 运行测试
pytest
# 格式化代码
black zhihu_scraper
isort zhihu_scraperzhihu-scraper/
├── zhihu_scraper/ # 主包目录
│ ├── __init__.py # 包初始化文件
│ ├── scraper.py # 爬虫核心类
│ ├── browser.py # 浏览器操作模块
│ ├── crawler.py # 爬取功能实现
│ ├── utils.py # 工具函数
│ ├── cli.py # 命令行接口
│ └── tests/ # 测试目录
├── examples/ # 示例脚本
├── .gitignore # Git忽略配置
├── .env.example # 环境变量示例
├── requirements.txt # 依赖列表
├── setup.py # 安装配置
└── README.md # 项目说明
- 本工具仅供学习和研究使用,请遵守知乎的使用条款和robots.txt规则
- 使用本工具抓取的内容,版权归原作者所有
- 请勿用于商业用途或大规模爬取
- 使用频率过高可能导致IP被限制,请合理控制爬取频率
MIT License © 2023