# Xhs Scan

> xhs-scan · 小红书账号诊断（中文别名：号诊 / 号诊一下 / 给这个号把个脉）。 免登录抓取任意小红书账号的公开笔记数据，自动生成一份可在线分享的诊断报告 HTML （含 4 张自适应图表、问题排查、三层调整方案）。 当用户发来【小红书主页链接】或【24 位账号 ID】并说"分析""诊断""看看这个号""排查问题" "为什么数据不好""怎么提升""出个报告""生成报告"时使用。 也适用于用户说"按上次那个小红书诊断的方式再来一份""号诊一下这个号"。

- Skill: `dacheng5188/xhs-scan` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add dacheng5188/xhs-scan`
- Raw SKILL.md: https://api.skillmd.com/api/skills/dacheng5188/xhs-scan/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: dacheng5188 (https://skillmd.com/u/dacheng5188)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/dacheng5188/xhs-scan

---


# xhs-scan · 小红书账号诊断

给一个小红书账号 ID 或主页链接 → 出一份可在线分享的诊断报告。

## 触发识别

用户消息里出现以下任意一种，即启用本 skill：

- 小红书主页链接：`xiaohongshu.com/user/profile/...`（带不带 `xsec_token` 都行）
- 24 位十六进制账号 ID，例如 `6446318e000000001f0327f7`
- 明确说"分析这个小红书账号""诊断一下这个号""出份报告"

**不需要**小红书 MCP，**不需要**扫码登录，纯公开页面抓取。

## 执行流程（4 步，全程自动）

设工作目录 `WORK`（建议 `工作区/output/xhs_<账号名>_<日期>`）。

### 第 1 步：抓数据

```bash
python <skill>/scripts/fetch_xhs.py "<ID或链接>" <WORK>
```

输出 `<WORK>/account.json`。脚本会打印账号昵称、粉丝数、笔记数、时间范围——**先看一眼确认抓对了**。

> 若输出 0 篇笔记或报错：可能是账号被封禁/隐藏笔记/触发风控。如实告知用户，不要编造数据。

### 第 2 步：生成报告

```bash
python <skill>/scripts/build_report.py <WORK>/account.json -o <WORK>/report.html
```

脚本会自动完成：量化统计 → 按阈值判定问题 → 生成 4 张自适应 SVG 图表 → 输出完整 HTML。
终端会打印判定出了几个问题，作为人工复核的抓手。

### 第 3 步：AI 润色（必须做，脚本做不了）

脚本产出的是**数据准确的骨架**，但有两处必须由你（AI）补全，否则报告质量不合格：

1. **「第二层」标题改写对照表** —— 脚本只列了原标题并标注"（待 AI 按公式改写）"。
   你要逐条改写，公式：**具体人群/场景 + 真实痛点 + 这篇能给出什么**。
   改写要点：
   - 删掉 emoji、`‼️`、`。。。。`，一条标题最多留 1 个符号
   - 补上用户真会搜的词（品类词 + 人群词 + 问题词）
   - 看完就知道这篇讲什么，不喊口号
2. **「第一层」和「第三层」的具体建议** —— 脚本用的是通用模板，
   你要结合账号简介、品类、实际标题，把建议写具体（例如把"资质/检测实拍"替换成该账号真正拥有的背书）。

**可选**：若脚本判定不适用的问题（如账号本身很健康），删掉对应问题块，不要硬凑。

### 第 4 步：发布在线版

用户默认要"可在线读取、能分享"的版本，所以生成后**主动发布**：

1. 建发布目录 `<WORK>/publish/`，把 `report.html` 复制成 `index.html`
2. **清理预览器注入**：本地预览后 HTML 会被塞入 `data-page-node-id` 属性（317 处左右），
   发布前必须清除，否则体积膨胀一倍：
   ```python
   s = re.sub(r'\s+data-page-node-id="[^"]*"', '', s)
   ```
3. 校验内容完整性（问题块数、表格行数、SVG 数、关键文案是否都在）
4. 用 `workbuddy_sites_deploy` 发布，`language: "static"`，
   `appName` 填「<账号名>账号诊断报告」
5. 报告里给出分享链接 + 管理入口提示

> **发布前必须确认用户当轮有明确要求**（"发布/上线/分享/在线"等）。若用户只说"生成报告"，
> 先本地交付并问一句要不要发布，不要擅自上线。

## 数据口径与限制（重要，别误读）

- 未登录状态下 `noteId` 为空、`likedCount` 多数为空字符串 —— **空字符串代表 0 赞，不是"没数据"**
- 能看到部分笔记 `likedCount` 为 `"1"` 等非空值，说明是真实渲染值 → 点赞数据可信
- **拿不到**：收藏数、评论数、阅读量、笔记正文、话题标签（需登录，见文末"补数据"）
- 只抓第一屏约 30 条。若 30 条全挤在最近几天 → 说明发布极密集，本身就是核心问题

## 自动判定规则（脚本内置，供人工复核）

| 问题 | 触发阈值 |
|---|---|
| 发布过密被限流 | 日均 ≥ 2.5 篇 |
| 密度偏高 | 日均 ≥ 1.5 篇 |
| 没进流量池 | 零赞占比 ≥ 50% |
| 选题同质化 | 最高占比选题 ≥ 25% |
| 标题无搜索价值 | 感叹号 ≥ 50% 或 emoji ≥ 40% 或 "。。" ≥ 25% |
| 人群太散 | 命中人群词 ≥ 4 种 |
| 王牌没打 | 简介含"专利/实验室/检测/研发"但标题中 0 次出现 |
| 缺视频 | 视频 0 篇且图文 ≥ 5 篇 |
| 重复内容 | 存在重复标题 |

## 硬性纪律

- **报告里涉及"删除/隐藏笔记"只能给建议，必须加粗提示"需你确认后再动手"**，绝不代操作
- 报告末尾注明数据来源与统计口径
- 全程大白话：结论先行、数据说话、不用运营黑话，让普通人看得懂
- 不要为了凑数编造问题；数据好的账号要如实说"没大问题"，并给出进阶建议

## 补数据（可选）

需要收藏/评论/阅读量时，用 CDP 扫码登录方案（参考 `references/login-cdp.md`）。
需要用户配合扫码，等待上限约 3 分钟，超时就用现有数据出报告并说明口径。

