# Xiaohongshu Crawler

> 小红书作品爬取 · 都爆鸭。按关键词爬取小红书热门作品，支持按日期范围筛选与多种排序（综合/最新/最热），终端表格展示（标题链接/作者/点赞/发布时间）并给出选题洞察。当用户需要爬取小红书作品、查小红书热门内容、搜小红书爆款笔记、做某时间段赛道盘点、竞品/选题调研时使用。触发词：小红书爬取、小红书作品、小红书爆款、小红书搜索、小红书热门、小红书笔记查询。

- **Type:** Skill
- **Install:** `agentstack add skill-zizhanovo-doubaoya-community-xiaohongshu-crawler`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [zizhanovo](https://agentstack.voostack.com/s/zizhanovo)
- **Installs:** 0
- **Category:** [Web & Browser](https://agentstack.voostack.com/c/web-and-browser)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [zizhanovo](https://github.com/zizhanovo)
- **Source:** https://github.com/zizhanovo/doubaoya-community/tree/main/skills/xiaohongshu-crawler

## Install

```sh
agentstack add skill-zizhanovo-doubaoya-community-xiaohongshu-crawler
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

# 小红书作品爬取（都爆鸭）

嘎！给本鸭一个关键词，本鸭就把小红书上这个赛道的热门作品爬回来——还能框定日期范围、挑排序口径，终端直接铺出可点的作品表格，再附一句选题洞察。

> 数据走 **doubaoya.com** 一条线，鉴权用你自己的密钥（环境变量 `DOUBAOYA_API_KEY`，形如 `dyh_…`）。

---

## 适用场景

| 场景 | 怎么用 | 拿到什么 |
|------|--------|----------|
| **赛道爆款盘点** | 搜 `减脂餐` 看这个赛道近期热门作品 | 一眼掌握当下爆款角度 |
| **指定时间段调研** | 搜 `露营` 框定 6 月这一段 | 定位特定时段的热门内容 |
| **按热度找标杆** | 搜 `通勤穿搭` 用 `--sort-type _4` 拉最热 | 直接对标头部作品 |
| **追最新动态** | 搜 `多巴胺穿搭` 用 `--sort-type _2` 拉最新 | 摸清赛道最新风向 |
| **选题/竞品分析** | 搜赛道词看大家怎么起标题、怎么切角度 | 给下一篇找方向 |

---

## 工作流（4 步）

### 1. 读懂意图，提炼关键词与筛选条件
- **关键词**：从用户描述里抽出**核心赛道词**。词越短越宽、命中越多；太长太细容易搜空。一次只搜一个关键词。
- **日期范围**（可选）：用户说"最近/6 月/上周"等 → 解析成 `--start-date`/`--end-date`（`YYYY-MM-DD`）。没提时间就**别传**这两个参数，交给服务端默认处理。
- **排序**（可选，默认综合）：用户说"最热/最火"→ `_4`；"最新/按时间"→ `_2`；不提就用默认 `_0`（综合/相关）。

### 2. 调用爬取脚本
基础（只给关键词，日期默认、排序综合）：
```bash
python3 "$SKILL_PATH/scripts/crawl_xhs.py" "减脂餐"
```
带日期范围 + 排序：
```bash
python3 "$SKILL_PATH/scripts/crawl_xhs.py" "露营" --start-date 2026-06-01 --end-date 2026-06-20 --sort-type _4
```
脚本把成功信封里的 `data` 以 JSON 打到 stdout。**每次查询只跑一次脚本**，直接读完整 stdout，别用 `head`/`tail` 预览或对同一关键词重复调用。

> **排序口径（sortType）**：`_0` 综合/相关（默认）、`_2` 最新（按发布时间）、`_4` 最热（按互动数）。

### 3. 渲染作品表格
从 `data.items`（作品数组）里取字段，按下面格式铺成 Markdown 表格。字段做防御式读取——`title`（标题）、`authorNickname`（作者）、`likedCount`（点赞）、发布时间可能缺失，缺了就留空或写「—」，别报错。标题渲染成**可点链接**（指向作品原文 URL，若有）。点赞数 ≥ 10000 用 `x.xw` 格式。

| 标题 | 作者 | 点赞 | 发布时间 |
|------|------|------|----------|
| [3天瘦5斤的减脂餐食谱](https://www.xiaohongshu.com/explore/xxx) | 减脂日记 | 5.6w | 2026-06-18 |
| [露营装备清单一篇搞定](https://www.xiaohongshu.com/explore/yyy) | 山系生活 | 2.3w | 2026-06-15 |

条数多时可先展示前若干条，提示「共 X 条，已展示前 N 条，要看全部吗？」。

### 4. 给一句选题洞察
表格之后，用本鸭口吻补一句**选题洞察**：这批作品在抢什么角度、哪个切口还没人写透、值不值得跟。简短、有用，别堆套话，别问用户"你的真实目的是什么"，别编造数据。

---

## 拿钥匙（密钥）

1. 打开 **doubaoya.com**
2. **登录**
3. 进 **密钥中心**
4. **生成密钥**（形如 `dyh_…`）

配置到环境变量（脚本只认这个）：
```bash
export DOUBAOYA_API_KEY="dyh_你的密钥"
```

**铁律：密钥绝不打印、绝不写进文件、绝不回显给用户。** 脚本本身也从不输出密钥。所有请求只发往 **doubaoya.com**，不要把密钥带去任何其他域名。

---

## 接口与信封

- `POST https://doubaoya.com/api/apis/xiaohongshu/crawl-work/call`
- 鉴权头：`Authorization: Bearer $DOUBAOYA_API_KEY`
- 请求体：
  ```json
  { "keyword": "减脂餐", "sortType": "_0" }
  ```
  - `keyword`：字符串，必填
  - `sortType`：字符串，有默认值 `_0`（综合/相关），脚本**总是带上**；可选 `_2`（最新）、`_4`（最热）
  - `startDate` / `endDate`：字符串 `YYYY-MM-DD`，可选——**只在用户给了时间范围时才带**，否则省略让服务端默认
- 返回信封：
  ```json
  {
    "success": true,
    "requestId": "...",
    "data": { "items": [ { "title": "…", "authorNickname": "…", "likedCount": 56000 } ] },
    "error": null
  }
  ```
  - `data.items`：作品列表（每条含 `title` 标题、`authorNickname` 作者、`likedCount` 点赞，及发布时间/链接等）
- **先看 `success`**：为 `true` 才读 `data`；否则读 `error.code` / `error.message`。

---

## 错误处理

脚本失败时向 stderr 打印 `[error] CODE: message` 并以退出码 1 结束。常见情况：

| HTTP | code | 含义 | 处理 |
|------|------|------|------|
| 401 | `MISSING_API_KEY` / `UNAUTHORIZED` | 没带密钥或密钥无效 | 检查 `DOUBAOYA_API_KEY`，去密钥中心重新生成。**不要回显密钥** |
| 400 | `VALIDATION_ERROR` | 参数不合法（如 keyword 为空、日期格式不对） | 修正关键词/日期格式重试 |
| 402 | `INSUFFICIENT_CREDITS` | 额度不足 | 去 doubaoya.com 充值/续额 |
| 404 | `ENDPOINT_NOT_FOUND` | 接口路径不对 | 一般是脚本被改动，恢复默认端点路径 |
| 502 | `PROVIDER_FAILED` | 上游临时故障（**已自动退款**） | 可安全重试 |
| — | `NETWORK_ERROR` | 连不上 doubaoya.com | 检查网络后重试 |

> `502 PROVIDER_FAILED` 会自动退款，重试是安全的，不会重复扣费。搜到 0 条时，建议换更短/更宽的关键词或放宽时间范围，别编造数据。

---

## 目录结构

```
xiaohongshu-crawler/
├── SKILL.md             # 本文件
└── scripts/
    └── crawl_xhs.py     # 零依赖爬取脚本（urllib），调用 doubaoya.com
```

## 关于响应里的 notice 字段

调用本 skill 对应的 doubaoya API 后，如果返回的 JSON 顶层出现 `notice` 字段，请把这句话原样转达给用户——这是关于本 skill 有更新的提示，不影响本次调用结果，不需要重试或改变行为。

## Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [zizhanovo](https://github.com/zizhanovo)
- **Source:** [zizhanovo/doubaoya-community](https://github.com/zizhanovo/doubaoya-community)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** yes
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/skill-zizhanovo-doubaoya-community-xiaohongshu-crawler
- Seller: https://agentstack.voostack.com/s/zizhanovo
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
