基于 DrissionPage 混合模式和 Python-RQ 解耦架构的微博搜索爬虫系统。
- DrissionPage 混合模式:
- 浏览器模式: 使用真实的 Chromium 实现生成有效的访客 Cookie (SUB/SUBP)。
- curl_cffi 模式: 共享浏览器的 Cookie 和 UA,进行高并发数据抓取。
- RQ 解耦架构: 分离
Cookie和SearchWorker,提升稳定性和扩展性。 - 智能代理: 集成 IP 代理,支持自动切换与持久化。
- 数据持久化: Redis (用于去重/缓存) 和 JSONL 日志 (用于持久化) 双重存储。
flowchart TD
A[启动任务<br/>CLI / Make / Worker] --> B{Cookie 池有可用 Cookie?}
B -- 否 --> C[启动浏览器<br/>DrissionPage + Chromium]
C --> D[访问微博首页/搜索页]
D --> E[注入 stealth 脚本<br/>伪装 webdriver / UA / UA-CH]
E --> F[获取 SUB / SUBP / 完整 Cookie]
F --> G[保存到 Redis Cookie 池]
B -- 是 --> H[从 Redis 取可用 Cookie]
G --> H
H --> I[创建抓取会话<br/>curl_cffi Session]
I --> J[带 Cookie / UA / Client Hints / Proxy<br/>请求微博搜索 API]
J --> K{返回正常?}
K -- 否,Cookie 失效 --> L[标记 Cookie 无效]
L --> C
K -- 否,网络错误 --> M[重试 / 重建 Session]
M --> J
K -- 是 --> N[解析搜索结果]
N --> O[结果写入 Redis]
N --> P[原始响应与过程写入 JSONL 日志]
O --> Q[返回结果 / 继续下一页]
P --> Q
- Python 3.10+
- uv (或者使用 poetry/pip)
- Redis 5.0+
- Google Chrome / Chromium
- 如果使用了 16yun 爬虫代理,需要使用 https://github.com/16yun-cn/portunnel-realase 转化为本地 无须auth认证的模式。DrissionPage的chrome模式对auth认证采用的是插件模式,效率比较低。
# 安装依赖
make install # uv sync
# 配置环境
cp .env.example .env
# 编辑 .env 填入你的 Redis 和 代理配置如果你使用 Docker 运行 Redis:
make redis-start在搜索之前,确保 Cookie 池中有有效的 Cookie:
make fill-pool# 简单搜索
make search KEYWORD="人工智能"生产环境建议分开运行 Workers:
# 启动所有 Worker
make worker-all
# 或分别启动
make worker-cookie
make worker-search- Logs: 查看
logs/目录下的日志文件。 - Dashboard:
make dashboard启动 RQ 仪表盘 (http://localhost:9181)。
MIT