File size: 14,011 Bytes
c481f8a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
# 小红书稳定采集微服务 (Spider_XHS) - 产品需求文档 (PRD)

## 1. 产品概述

### 1.1 产品名称
小红书稳定采集微服务 (Spider_XHS Stability Data Service)

### 1.2 产品定位
一款面向企业级大模型(AI Agent)、数据分析、内容运营等上游业务,提供**高可用、抗风控、全链路可溯源**的小红书数据采集基础设施。本产品将底层的反爬对抗与数据清洗封装为标准 RESTful API,使得上游业务无需关注账号、风控及底层协议细节,即可稳定获取所需数据。

### 1.3 背景与痛点
- **风控严苛**:小红书针对协议级 API 采集有着极强的反爬策略(封号、IP 限流、滑动验证码)。单一的协议破解(如逆向 `x-s` 签名)往往在遭遇强风控时全线崩溃。
- **效率与稳定性的博弈**:传统的浏览器自动化方案(Playwright/Selenium)虽能较好地模拟真人绕过风控,但并发低、极其消耗 CPU/内存资源,无法满足大规模跑批需求。
- **业务不能断流**:对于上游的内容生成和监控业务,数据的断流意味着业务停滞,必须拥有 100% 可用的兜底机制。

### 1.4 核心解决方案
**“稳定性调度大脑 (Stability Controller) + 三引擎自动降级 + RPA 回传兜底 + AI Agent 自动化获客闭环”**1. **主链路(三引擎自动降级)**   - 引擎 A (Spider_XHS): 协议逆向极速采集(高并发、低成本)
   - 引擎 B (MediaCrawler): Playwright Stealth 增强页面采集(含拟人化)
   - 引擎 D (AgenticCrawler): 基于大模型视觉的智能自适应页面解析引擎(抗前端 DOM 改版)
2. **统一调度与资源池**:前置 Stability Controller 负责基于错误策略(`auth/rate/risk/captcha/timeout` 等)对 Account Pool(账号冷却池)、Session Pool(会话轮换)和 Proxy Pool(动态代理评分与剔除)进行资源分配、重试与引擎降级决策。在遇到复杂验证码时,主动唤醒 **AI Agentic Captcha Solver** 智能解除风控。
3. **兜底链路(Chrome 插件 RPA 回传)**:当所有自动引擎和 AI 解除验证码均失效,任务进入 `WAITING_RPA` 时,由人工在真实浏览器环境中通过插件采集并调用 `POST /api/v1/import/extension` 回传结果。
4. **离线导入链路(人工离线导入)**:支持运营人员导出的 Excel(小红书数据助手等)格式化导入。
5. **AI 编排脚本(Orchestrator)**:提供基于 SQLite 的业务编排闭环,包含数据清洗、AI 智能生成图文内容、基于 AI Agent(`browser-use`)的**全自动真实发布****高意向线索自动私信触达**6. **运营控制台 (Ops Console)**:提供基于 React + Ant Design 的前端看板,实现资源池(账号/会话/代理)监控、错误分析聚合与内容库的只读可视化。

---

## 2. 核心架构设计

### 2.1 系统架构图概览
```text
上游业务 (Java/Agent) ──► [ OpenAPI / Webhook ] ──► (Spider_XHS FastAPI 微服务)

   ┌──────────────────────────────────────────────────────┤
   ▼                                                      ▼
[ 稳定性大脑: Stability Controller ]                 [ 兜底链路:数据导入 (Importer) ]
   ├─► 资源分配:Account Pool + Session Pool + Proxy Pool    ├─► 解析器: xhs_data_assistant
   ├─► AI Agent 风控解除 (Captcha Solver)                    ├─► 解析器: fixed_template
   ▼                                                      │
[ 多引擎执行链路 (Runner) ]                                  └─► 字段标准化、元数据注入
   ├─► 引擎 A (Spider_XHS): 协议逆向、极速并发                │
   │   └─ 遇 timeout/rate/auth/risk/captcha ─重试/降级─┐     │
   │                                                    ▼    │
   ├─► 引擎 B (MediaCrawler): Stealth 防抖模拟人行为          │
   │   └─ DOM 解析失效/改版 ─降级─┐                          │
   │                             ▼                           │
   └─► 引擎 D (Agentic Crawler): AI 视觉自动解析 ───────────┤
       └─ 若仍被验证码拦截 → 状态 WAITING_RPA(等待人工回传) │
   ┌──────────────────────┴───────────────────────────────┘

[ 持久化与监控 ]
   ├─► 文件存储 (JSON + HTML快照) 带有 fcntl 进程锁
   ├─► 限流拦截 (IP 滑动窗口 RateLimit)
   └─► Prometheus 指标监控 (/metrics)


[ AI 自动化业务编排 (Orchestrator) ]
   ├─► 核心数据库: SQLite (14张业务表: 关键词、生成草稿、线索等)
   ├─► AI Agent 自动操作: 发布图文 (publish_tracker.py)
   ├─► AI Agent 自动操作: 线索私信触达 (lead_service.py)
   └─► 生态协同: 数据清洗、AI 图文生成、飞书同步

[ 运营控制台 (Ops Console) ]
   ├─► 资源池中心 (账号/会话/代理健康快照)
   ├─► 错误中心 (任务失败聚合与异常扫描)
   └─► 内容库看板 (基于 SQLite 数据的全量只读展示)

  (第三兜底链路:Chrome 插件 RPA 回传)
    浏览器插件 ──► POST /api/v1/import/extension ──► 写入任务结果
```

---

## 3. 功能需求说明

### 3.1 核心采集业务 (Data Scraping)
- **笔记详情采集 (`note_url`)**:输入笔记链接,获取无水印图文、视频信息、正文、点赞/收藏/评论等互动数据。
- **用户主页采集 (`user_profile`)**:输入用户 ID 或主页链接,获取博主基本信息、粉丝数、关注数、获赞与收藏总数。
- **关键词搜索采集 (`search`)**:输入关键词,获取相关笔记列表,支持按综合/最新/热门排序。

### 3.2 智能引擎调度与稳定性控制 (Stability Controller)
- **资源池化管理**:系统内置账号池 (Account Pool)、会话池 (Session Pool) 和代理池 (Proxy Pool),所有采集任务通过 Stability Controller 动态获取最佳健康资源。
  - **代理打分与剔除**:代理池支持多 provider 聚合,根据任务执行结果实时回写分数,自动降权并剔除高失败率代理。
  - **账号防封冷却**:连续遭遇 `rate``risk` 错误的账号将进入冷却窗口,避免被平台拉黑。
- **三引擎容灾与降级(服务端自动执行)**  - 任务默认以 `auto` 策略下发,优先分配给 **Spider_XHS 引擎 (Engine A)** 以最高效率执行。
  - 监听执行异常并按策略表处置:`timeout` 换代理重试;`rate` 账号冷却+换账号降频;`auth` 标记会话失效+换 Session。
  - 遇到强风控 (`risk`/`captcha`) 时,降级至 **MediaCrawler 引擎 (Engine B)**。
  - Engine B 内置 Stealth 脚本与随机拟人化行为。若 Engine B 报 `parse` 错误(说明 DOM 结构发生变化),任务自动流转至 **Agentic Crawler (Engine D)**,由大模型视觉接管。
  - **智能验证码解除 (Captcha Solver)**:遇到复杂滑块或点选验证码时,系统主动实例化基于大模型的 `AgenticCaptchaSolver`,尝试自动操控浏览器完成过验。若 Agent 仍失败,任务进入 `WAITING_RPA` 状态。
- **终极免疫链路(人工 RPA 回传)**:处于 `WAITING_RPA` 的任务可由人工通过 Chrome 浏览器插件拦截并回传数据,完成闭环;该链路属于人工兜底通道,而非服务端自动执行的引擎线程。

### 3.3 异步任务与状态流转 (Task Lifecycle)
- **扩展任务状态机**:支持 `queued` -> `running` -> `retrying` -> `fallback_running` -> `succeeded` / `failed` / `waiting_rpa` / `rpa_imported` / `risk_paused` 等细粒度状态。
- **异步拉取**:上游业务通过创建任务获取 `task_id`,并可通过长轮询获取执行结果。
- **Webhook 回调**:支持配置全局 `CALLBACK_URL`。任务到达终态后自动触发回调推送。
  - **回调重试**:如遇上游网络抖动,系统自动采用指数退避算法最多重试 5 次,并在头部携带 `Idempotency-Key` 确保上游幂等消费。

### 3.4 离线数据人工兜底 (Offline Import)
- **Excel 文件解析**:提供 `/api/v1/import/excel` 接口,支持上传 Excel 文件。
- **模板智能识别**:自动识别“小红书数据助手”等特定报表格式。
- **数据标准化**:提取“曝光、阅读、互动、转粉”等高阶流量指标,将其与自动化采集的数据结构对齐 (`normalized` 数据契约)。
- **全链路溯源**:保留 `operator` (操作人)、`source_name` (来源)、行号及表名等元数据,便于数据审计。

### 3.5 运营控制台与可视化 (Ops Console)
- **资源池中心**:直接复用内存池(Account/Session/Proxy Pool)状态快照,提供只读的可视化列表,方便运维人员实时监控风控与资源健康度。
- **错误聚合分析**:基于本地任务文件系统,扫描近期(如近 1000 条)采集任务,并根据错误类别(auth/rate/risk/captcha 等)进行高阶聚合分析,提供失败列表过滤能力。
- **内容库基础页**:对接 Orchestrator 的 SQLite 底座,为业务人员提供原始笔记和标准化笔记的分页查询与模糊检索视图。

---

## 4. 非功能需求

### 4.1 并发与数据一致性
- **无状态服务设计**:服务进程应尽量无状态化,数据落盘依赖本地文件系统(`./storage`)。
- **并发控制锁**:针对单机多进程/多线程场景,写入任务状态时必须使用 `fcntl.flock` 实现进程间排他锁,配合 `.tmp` 文件原子替换 (`os.replace`),杜绝高并发下的文件写坏或数据覆盖问题。

### 4.2 限流与防雪崩
- **IP 级滑动窗口限流**:内置轻量级基于内存的 API 限流(如 `100 次 / 60 秒`),超出阈值立即返回 HTTP 429 状态码与 `Retry-After` 头,防止恶意或异常流量打垮服务。

### 4.3 监控与可观测性
- **Prometheus 集成**:暴露标准 `/api/v1/metrics` 接口,输出以下核心指标:
  - `spider_xhs_tasks_total{engine, status}`:各引擎任务执行计数。
  - `spider_xhs_queue_length` 与 `spider_xhs_tasks_inflight`:当前排队及在途队列长度。
  - `spider_xhs_recent_failure_rate`:滑动窗口内的实时失败率报警指标。
  - 代理池指标:`spider_xhs_proxy_pool_size`、`spider_xhs_proxy_pool_avg_score` 及失败原因分布统计。
- **结构化日志**:使用 `loguru` 输出结构化日志并按天切割;对部分错误日志做基础脱敏处理,但不保证对所有自定义日志字段自动脱敏,敏感凭证应只通过环境变量注入且避免打印。

### 4.4 部署与兼容性
- **容器化支持**:提供 Dockerfile 与 Docker Compose 编排,支持一键部署。存储目录独立挂载,保障数据持久化。
- **向后兼容**:针对历史未带版本号的旧 API,可通过配置 `ENABLE_LEGACY_ROUTES=1` 提供兼容层平滑过渡。

---

## 5. API 接口契约说明

### 5.1 全局契约
所有 RESTful API 的响应体均采用标准三段式包装:
```json
{
  "code": 200,          // 业务状态码,200 为成功,100xx 为特定业务错误
  "msg": "success",     // 提示信息
  "data": { ... }       // 载荷数据
}
```

### 5.2 核心端点规划
| 端点路径 | Method | 用途 | 核心参数/说明 |
|---|---|---|---|
| `/api/v1/tasks` | POST | 创建采集任务 | 必传: `task_type`, `target`; 可选: `engine`, `payload` |
| `/api/v1/tasks/{id}` | GET | 查询任务状态 | 返回当前状态 (`queued`, `running` 等) |
| `/api/v1/tasks/{id}/result`| GET | 获取任务结果 | 若未完成返回 409;完成后返回 `raw`, `normalized`, `meta` |
| `/api/v1/tasks/{id}/callback/retry` | POST | 手动重试回调 | 用于 Webhook 推送彻底失败后的人工介入 |
| `/api/v1/import/excel` | POST | 上传并解析 Excel | 必传: `file`, `operator`; 输出标准化清洗结果 |
| `/api/v1/import/extension` | POST | 插件 RPA 结果回传 | 必传: `task_id`, `raw`, `normalized`; 更新任务为 `RPA_IMPORTED` |
| `/api/v1/metrics` | GET | Prometheus 指标 | 面向监控采集系统 (如 Grafana),含任务、队列、代理池状态 |
| `/api/v1/health` | GET | 健康检查与看板 | 包含队列长度、在途数、各引擎执行统计及实时失败率 |

---

## 6. 演进规划 (Roadmap)

- **Phase 1 (V1.0) - 历史版本**:完成双引擎双链路架构重构,实现核心采集、容灾降级、IP限流、并发控制与容器化监控交付。
- **Phase 2 (MVP) - 当前版本**:新增轻量级 Orchestrator 编排脚本与 SQLite 核心业务数据库,提供“采集同步→内容清洗→Mock 飞书同步/告警”的最小闭环样例。
- **Phase 3 (Stability) - 当前版本**:完成 Stability Controller (稳定性大脑) 重构,补齐 Account Pool、Session Pool 与 Proxy Pool 的全链路生命周期管理。完成 Chrome 插件回传通道(`/api/v1/import/extension` + `WAITING_RPA` 状态机),形成“双引擎自动采集 + 人工 RPA 回传兜底”的可控闭环。新增基于 React 的运营控制台,落地资源池中心、错误中心与内容库基础页的只读可视化。
- **Phase 4 (V1.1)**:增加任务优先级队列 (Priority Queue),支持高优紧急任务插队;集成 Redis 作为分布式存储与分布式锁的选项,支持多节点横向扩容部署。
- **Phase 5 (V2.0)**:接入大模型智能提取链路(针对未知格式或乱码的 Excel,通过 LLM 自动提取结构化内容);提供可视化热更新管理后台(用于账号池、代理池调优)。