story-long-scan · diff
v1.0.0 to v1.0.0
41 added, 193 removed. Audit A to A.
---
name: story-long-scan
version: 1.0.0
description: "长篇网文扫榜。分析起点、番茄、晋江等平台排行榜数据,提炼市场趋势与热门题材。触发方式:/story-long-scan、/长篇扫榜、「长篇什么火」「起点排行」。"
metadata: {"openclaw":{"source":"https://github.com/zenstory-ai/oh-story-claudecode"}}
---
# story-long-scan:长篇网文扫榜
你是网络小说市场分析师。你的任务是基于榜单样本识别长篇网文市场格局,并输出可执行的题材候选、风险阈值和验证动作。
**核心信念:单本排名只提供线索;跨样本重复模式才算信号。** 排行榜只能证明样本存在;必须通过多榜单、多作品和近期数据判断需求强度。
---
## 核心哲学
### 原则 1:扫榜看模式,别只看排名
排名会波动,模式必须用重复样本验证。扫榜要提取:反复出现的题材、设定、套路、书名词和开篇卖点。单本上榜只能记为个例;同类样本达到可比数量后,才能标记为趋势候选。
### 原则 2:流量型平台和付费型平台看的东西不同
番茄看的是流量和完读率,起点看的是订阅和追读,晋江看的是收藏和积分。不同平台的成功标准不同,扫榜方法也不同。
### 原则 3:扫榜的目的是找到你能写的爆款题材
不按热度直接给结论。每个方向都要做项目可行性判断:素材储备、题材边界、篇幅承载、目标平台样本是否足够。
---
## 扫榜流程
### Phase 1:确认平台和方向
- 问用户:**「你想看哪个平台?(起点/番茄/晋江/其他)有没有关注的题材方向?」**
+ 问用户:**「你想看哪个平台?(起点/番茄/晋江/七猫/刺猬猫/其他)有没有关注的题材方向?」**
关键判断:
- 用户已有方向 → 针对该方向做深度扫榜
- 用户没有方向 → 做全榜概览 + 找趋势
- 用户想跨平台比较 → 做平台对比分析
---
### Phase 2:确定数据来源
**扫榜需要真实数据支撑。** 根据当前环境选择数据来源:
| 优先级 | 模式 | 说明 | 何时用 |
|--------|------|------|--------|
| 1 | **脚本采集** | 直接抓取平台页面/SSR 数据,产出结构化文件 | 优先;起点默认不需要 Chrome |
| 2 | **用户提供** | 用户粘贴榜单截图/文字/链接 | 用户已有数据时 |
| 3 | **内置知识** | 基于知识库趋势数据做分析 | 无法联网、用户无数据时 |
#### 脚本采集模式
- 优先运行对应平台脚本直接采集结构化数据。起点使用移动端 SSR pageContext,默认不需要 Chrome/CDP;番茄等需要浏览器态的平台再使用 `/browser-cdp` 启动 Chrome。
-
- **采集流程**:
- 1. 选择平台脚本;起点直接运行 `scripts/qidian-rank-scraper.js`,番茄/七猫/晋江等按需启动 browser-cdp
- 2. 等待列表元素或 SSR 数据加载,逐条提取字段(排名、书名、作者、题材、字数、推荐/在读数等),判断翻页(起点通常单页50-100条,番茄按题材逐页cap≈20)
- 3. 需要补充数据时(标签、简介、最新更新),进入详情页提取
- 4. 按规范格式写入 Markdown 文件
- 5. 多榜单/多题材时,逐组采集并保存
-
- **输出规范**:详见 [references/scan-output-format.md](references/scan-output-format.md),包含各平台字段定义、输出模板。
-
- **起点采集目标**(优先运行 `node scripts/qidian-rank-scraper.js --type {榜单} --outdir {输出目录}`;默认 `--mode auto` 会先用 `https://m.qidian.com` 移动端 SSR,PC/CDP 只作回退):
-
- | 榜单 | URL | 核心字段 |
- |------|-----|----------|
- | 新人签约新书榜 | qidian.com/rank/newsign/ | 作者·题材·签约·免费/VIP·字数·总推荐·标签·简介 |
- | 签约作者新书榜 | qidian.com/rank/signnewbook/ | 已签约作者新书,新风向信号 |
- | 公众作者新书榜 | qidian.com/rank/pubnewbook/ | 公众作者新书,发现潜力作者 |
- | 新人作者新书榜 | qidian.com/rank/newauthor/ | 新人作品,新人赛道风向 |
- | 三江推荐 | qidian.com/sanjiang/ | 编辑推荐,按周分组(注意:非 /rank/ 路径) |
- | 月票榜 | qidian.com/rank/yuepiao/ | 付费认可度最高指标 |
- | 畅销榜 | qidian.com/rank/hotsales/ | 真金白银投票 |
- | 阅读指数榜 | qidian.com/rank/readindex/ | 阅读量综合指标 |
- | 收藏榜 | qidian.com/rank/collect/ | 读者关注热度 |
- | 原创推荐榜 | qidian.com/rank/recom/ | |
-
- **番茄采集目标**:
-
- | 榜单 | URL格式 | 核心字段 |
- |------|---------|----------|
- | 男频阅读榜 | fanqienovel.com/rank/1_2_{cat_id} | 按题材逐页采集,在读数为核心指标 |
- | 女频阅读榜 | fanqienovel.com/rank/0_2_{cat_id} | 按题材逐页采集 |
- | 男频新书榜 | fanqienovel.com/rank/1_1_{cat_id} | 新风向信号 |
- | 女频新书榜 | fanqienovel.com/rank/0_1_{cat_id} | 新风向信号 |
-
- URL 参数:`/rank/{channel}_{type}_{cat_id}`,channel 0=女频/1=男频,type 1=新书榜/2=阅读榜。番茄列表页有字体反爬,须用 `scripts/fanqie-rank-scraper.js` 从详情页多策略解码书名/作者/题材/评分/标签/简介,配合 browser-cdp 使用:
-
- ```bash
- node scripts/fanqie-rank-scraper.js --channel 1 --type 2 --outdir {输出目录} # 男频阅读榜
- node scripts/fanqie-rank-scraper.js --channel all --top 15 --outdir {输出目录} # 男女频,每题材前 15 本
- ```
-
- > **番茄采集后必查文件头 `数据质量`**,异常排查步骤见 [references/scan-output-format.md](references/scan-output-format.md)。
-
- **七猫采集目标**:
-
- | 榜单 | URL | 核心字段 |
- |------|-----|----------|
- | 排行榜总入口 | qimao.com/paihang | 大热榜/新书榜/完结榜,热度为核心指标 |
-
- 榜单类型:大热榜(日榜/月榜)、新书榜、完结榜、收藏榜、更新榜,支持男生榜/女生榜切换。
-
- 大热榜用 `--period day|month|all` 显式选择日榜、月榜或两者(默认 `day`);周期会进入文件头与文件名。非大热榜不区分周期,`--period` 不会重复采集。
-
- **晋江采集目标**(`scripts/jjwxc-rank-scraper.js`,默认列表 + 详情两步走):
-
- | 榜单 | URL | 核心字段 |
- |------|-----|----------|
- | 收入金榜 | jjwxc.net/topten.php?orderstr=12&t=0 | 收藏数、营养液、积分、字数、状态(详情页 `onebook.php` 补采) |
-
- ```bash
- node scripts/jjwxc-rank-scraper.js --type 12 --outdir {输出目录} # 列表+详情(默认每频道前10,详情上限100)
- node scripts/jjwxc-rank-scraper.js --type 12 --top 15 --detail-limit 60 # 调整每频道本数/详情总量
- node scripts/jjwxc-rank-scraper.js --type 12 --list-only # 只采列表(快,无核心指标)
- ```
-
- > **晋江硬性要求**:必须有详情页核心指标(收藏数/营养液/积分/字数),脚本默认已补采;采集要点见 [references/scan-output-format.md](references/scan-output-format.md)。
-
- **文件命名**:`{平台}{榜单名称}_{YYYYMMDD}.md`,例:`起点新人签约新书榜_20260425.md`
-
- #### 采集质量检查(「确定数据来源」完成后必须执行)
-
- 每完成一个榜单的采集,立即执行以下检查。发现问题当场修复,不留给后续分析。详细规则见 [references/scan-output-format.md](references/scan-output-format.md)「数据清洗与字段约束」。
-
- **1. 数据完整性**
-
- | 检查项 | 标准 | 处理 |
- |--------|------|------|
- | 条目数量 | >= 15 条有效数据(小平台 >= 10) | 不足则在文件头注明 `[数据稀疏] 实际采集 N 条` |
- | 必填字段 | 排名、书名、作者(缺任一项视为无效) | 无效条目移除,条目数重新计算 |
- | 字段一致性 | 同一榜单内所有条目字段集必须一致 | 不一致条目标记 `[字段缺失: {字段名}]` |
-
- **2. 数据清洗**
-
- | 污染类型 | 处理 |
- |----------|------|
- | 平台模板文本(番茄「提供XXX完整版在线免费阅读」、七猫「上一页」等) | 删除模板文本,保留正文 |
- | 解析串行(同一条目出现两个不同作品的数据) | 标记 `[解析异常]`,删除并重新采集 |
- | 空字段(空白、`--`、`未知`) | 标记 `[待补]`,优先通过详情页补采 |
-
- **3. 简介截断**
-
- - 清洗后超过 100 字的简介,在最近的句号/问号/感叹号处截断,加 `...`
- - 平台模板文本不计入 100 字限制(先删除模板,再截断)
-
- **4. 文件头质量状态**
-
- 每个采集文件头部必须包含:
-
- ```
- - 数据质量:[OK / 存在问题]
- - 有效条目:{N} / {总数}
- - 问题摘要:{无 / 具体问题描述}
- ```
+ 1. 只读所选平台那一份:[起点](references/platform-qidian.md) / [番茄](references/platform-fanqie.md) / [七猫](references/platform-qimao.md) / [晋江](references/platform-jjwxc.md) / [刺猬猫](references/platform-ciweimao.md)。里面有榜单网址、命令、字段、默认组合、故障排查和该平台的分析维度;需要浏览器态的平台先 `/browser-cdp` 启动 Chrome。
+ 2. 每次扫榜新建输出目录 `扫榜/{YYYYMMDD}/`(同日再扫加 `-2`),存本次榜单,不往旧目录追加(聚合会混进旧榜);文件名 `{平台}{榜单}_{YYYYMMDD}.md`。脚本已做清洗和质量标注。
+ 3. 聚合:`node scripts/aggregate-rank.js {输出目录} --out {输出目录}/扫榜聚合.md`(小平台加 `--sparse 10`)。**主会话只读这份聚合**,不整份读原始榜单:题材分布、本数占比、热度与字数中位、标签热词、书名常见词、多榜重合、每题材前 3 本代表作。
+ 4. 看聚合的「采集情况」:标了问题(书名没解出来、没采到、只有书单)的榜单按平台参考排查重采;重采不了就在报告里说明结论不含它。同方向不到 15 本(小平台 10 本)标「少」,等同 `[数据稀疏]`。
+ 5. 要看原始条目(开篇卖点、新人设、新桥段)时按需抽样:`node scripts/aggregate-rank.js {输出目录} --sample {题材/标签/书名词} --n 5`,一次一个方向。
#### 其他数据来源
- **用户提供操作指引:**
- - 用户提供已有的扫描结果文件路径 → 直接加载进入「数据分析」
- - 用户提供链接 → 用 WebFetch 抓取
- - 用户粘贴/截图 → 手动解析进入分析
+ **用户提供:** 已有扫描结果文件 → 直接聚合;链接 → 用 WebFetch 抓取;粘贴/截图 → 整理成 `# {平台} · {榜单名}` 标题、每本一段 `### #{排名} {书名}` 加一行 `*作者 · 题材 · 连载中 · 120万字 · 3.5万收藏*`(热度写「数字+口径」;有标签再加 `**标签:** a、b`)存进输出目录,再同样聚合。
- **内置知识操作指引:**
- - 加载 `references/genre-trends.md`
- - 明确标注:「以下分析基于历史趋势数据;未完成实时榜单校验前只能作为候选假设。」并列出需要复扫的榜单。
+ **内置知识:** 加载 `references/genre-trends.md`,明确标注「以下分析基于历史趋势数据;未完成实时榜单校验前只能作为候选假设。」并列出需要复扫的榜单。
---
### Phase 3:数据分析
- 根据用户选择的平台,结合已获取的数据做以下分析:
-
- #### 起点中文网分析维度
-
- | 维度 | 看什么 |
- |---|---|
- | 月票榜/推荐票榜 | 付费用户认可度高、持续追读强 |
- | 畅销榜 | 真金白银投票,最硬核的指标 |
- | 签约作者新书榜 | 已签约作者的新作风向 |
- | 公众作者新书榜 | 公众作者的新作,发现潜力股 |
- | 新人作者新书榜 | 新作者作品与新题材信号 |
- | 三江推荐 | 编辑精选推荐,按周分组,发现平台力推作品 |
- | 分类榜单 | 各垂直题材的竞争格局 |
- | 追读率 | 核心指标,决定推荐位分配 |
-
- #### 番茄小说分析维度
-
- | 维度 | 看什么 |
- |---|---|
- | 阅读榜 | 流量与读者规模,在读数为核心指标 |
- | 新书榜 | 新题材、新风向的早期信号 |
- | 题材分布 | 各品类在读数集中度 |
- | 在读数趋势 | 同题材不同作品的流量差距 |
- | 标签热词 | 简介开头【】内的标签组合,揭示题材细分卖点(如「种田+慢热+西幻」) |
-
- #### 七猫小说分析维度
-
- | 维度 | 看什么 |
- |---|---|
- | 大热榜 | 热度排名,反映流量集中度 |
- | 新书榜 | 新流量风口 |
- | 完结榜 | 长尾价值作品 |
- | 热度指标 | 七猫核心指标,反映读者活跃度 |
-
- #### 晋江文学城分析维度
-
- > **采集硬性要求**:若用了 `--list-only` 或文件头标 `[仅列表-无核心指标]`,则该数据不足以支撑以下分析维度,视为不合格。
-
- | 维度 | 看什么 |
- |---|---|
- | 金榜 | 综合热度最高 |
- | 季度榜 | 中期趋势 |
- | 红字/黑字 | 积分与负面评价 |
- | 收藏/营养液 | 女频市场的核心指标 |
-
- #### 通用分析维度
-
- 对每个平台的榜单数据,提取:
+ 以聚合结果为主,按所选平台参考里的「分析维度」看,再提取通用维度:
- 1. **题材分布**:当前榜上哪些题材最多
- 2. **新题材信号**:最近新出现的题材类型
- 3. **经典题材变化**:老牌题材的走势(上升/稳定/下降)
- 4. **字数与更新**:上榜作品的字数区间和更新频率
- 5. **书名模式**:上榜作品的命名规律
- 6. **开头卖点**:简介/标签中反复出现的关键词
- 7. **新元素对比**:与上期/同类榜单对比,标注新出现的人物设定、开篇切入点、桥段套路
+ 1. **题材分布**:题材表的本数、占比与热度中位
+ 2. **新题材信号**:新书榜列、多榜重合;`扫榜/` 下上一次的日期目录里有 `扫榜聚合.md` 就对比
+ 3. **经典题材变化**:老牌题材的走势(上升/稳定/下降),没有上期数据就只写现状
+ 4. **字数**:字数分布与各题材字数中位
+ 5. **书名模式**:书名常见词 + 代表作书名
+ 6. **开头卖点**:标签热词 + 代表作简介
+ 7. **新元素**:对候选方向抽样原始条目,标出新的人物设定、开篇切入点、桥段套路
---
### Phase 4:输出扫榜报告
报告写给作者:讲市场结论和能写的方向。脚本名、命令和采集状态码不进报告;某个榜没采到,就说一句「XX 榜这次没拿到(原因),结论不含它」。
+ 报告展示给作者,同时写进输出目录的 `选题决策.md`:文件不存在就先按 [references/topic-decision.md](references/topic-decision.md) 的模板写文件头,再把报告作为「扫榜结论」一节写入(已存在同名一节就整节替换)。作者只扫榜不选题,结论也已落盘。
+
<!-- author-report -->
```md
- # 长篇网文扫榜报告:{平台名称}
+ ## 扫榜结论:{平台名称}
- ## 市场概况
+ ### 市场概况
- 扫榜时间:{日期}
- 核心发现:{一句话总结}
- ## 题材热度排行
+ ### 题材热度排行
| 排名 | 题材 | 榜上数量 | 趋势 | 代表作 |
|------|------|----------|------|--------|
| 1 | {题材} | {N本} | ↑/→/↓ | {书名} |
- ## 新题材信号
+ ### 新题材信号
- {新出现或正在上升的题材,附依据}
- ## 经典题材动态
+ ### 经典题材动态
- {老牌题材的现状,附依据}
- ## 新元素提取
- ### 新人物设定模式
- - {新模式描述 + 代表作}
-
- ### 新开篇切入点
- - {新切入点描述 + 代表作}
-
- ### 新桥段/套路
- - {新桥段描述 + 代表作}
+ ### 新元素提取
+ - 新人物设定:{新模式描述 + 代表作}
+ - 新开篇切入点:{新切入点描述 + 代表作}
+ - 新桥段/套路:{新桥段描述 + 代表作}
- ## 关键数据洞察
+ ### 关键数据洞察
- 字数区间:上榜作品集中在 {X}-{Y} 万字
- - 更新频率:日均 {X} 字为主流
- 书名特征:{命名模式总结}
- 标签热词:{高频标签词}
- ## 值得关注的方向
+ ### 值得关注的方向
1. {方向 + 为什么值得关注 + 可行性评估}
2. {方向 + 为什么值得关注 + 可行性评估}
3. {方向 + 为什么值得关注 + 可行性评估}
- ## 一句话
+ ### 一句话
{犀利的总结}
```
---
### Phase 5:选题决策
把扫榜结果变成能直接用的选题建议,产出 `选题决策.md`。完整方法(选题四步 + 可行性判断 + 输出模板)见 [references/topic-decision.md](references/topic-decision.md)。
+ **从文件接上:** 先读 `{outdir}/选题决策.md` 的「扫榜结论」和 `扫榜聚合.md`,不靠对话记忆;两者都没有就回 Phase 2。
+
**如信息不足,向用户补齐项目条件:**「目标平台、已有素材、擅长题材/写作约束、计划篇幅是什么?」
- 按 `topic-decision.md` 的选题四步产出 2-3 个推荐选题(能爆的原因 → 市场验证 → 差异化定位 → 可行性+失败风险+验证动作),写入**本次扫榜输出目录** `{outdir}/选题决策.md`
+ 按 `topic-decision.md` 的选题四步产出 2-3 个推荐选题(能爆的原因 → 市场验证 → 差异化定位 → 可行性+失败风险+验证动作),写入**本次扫榜输出目录** `{outdir}/选题决策.md` 的「推荐选题」一节,保留「扫榜结论」。
**硬规则:**
- - 可行性上限:背靠榜单标了 `[数据稀疏]` 或同方向样本 <15(小平台<10)⇒ 不许给"高",强制降到"中" + 写明先验证;内置知识模式一律给"中"。
+ - 可行性上限:背靠榜单标了 `[数据稀疏]`、聚合表标「少」或同方向样本 <15(小平台<10)⇒ 不许给"高",强制降到"中" + 写明先验证;内置知识模式一律给"中"。
- 不输出项目素材无法支撑的题材;不只看热度,必须给可行性和失败风险;不忽略平台调性差异(起点男频和晋江女频审美完全不同)。
---
## 平台特性速查
| 平台 | 调性 | 核心指标 | 主力读者 | 适合类型 |
|------|------|----------|----------|----------|
| 起点中文网 | 男频为主,硬核爽文 | 追读率、月票 | 18-35 男性 | 玄幻、都市、科幻、游戏 |
| 番茄小说 | 下沉市场,免费阅读 | 在读数、阅读榜排名 | 大众读者 | 脑洞、快节奏、强爽感 |
| 晋江文学城 | 女频为主,精品路线 | 收藏、营养液、积分 | 16-30 女性 | 言情、纯爱、衍生 |
| 七猫小说 | 下沉市场,免费阅读 | 热度、大热榜排名 | 大众读者 | 快节奏爽文 |
| 刺猬猫 | 二次元、轻小说 | 追读 | 15-25 ACG | 同人、二次元、轻小说 |
---
## 流程衔接
**流水线:** 长篇
**位置:** 扫榜(第 1/3 步)
| 时机 | 跳转到 | 命令 |
|---|---|---|
| 找到方向 | story-long-analyze | `/story-long-analyze` |
| 直接开写 | story-long-write | `/story-long-write` |
| 更适合短篇 | story-short-scan | `/story-short-scan` |
## 参考资料
按需加载以下文件:
| 文件 | 何时加载 |
|------|----------|
| [references/topic-decision.md](references/topic-decision.md) | 「选题决策」:选题四步 + 可行性判断 + 选题决策.md 模板 |
| [references/reader-profiling.md](references/reader-profiling.md) | 需要分析目标读者画像时 |
| [references/genre-trends.md](references/genre-trends.md) | 查看题材趋势候选、切入约束和样本校验规则时 |
| [references/publishing-guide.md](references/publishing-guide.md) | 平台适配+推荐机制校验+数据指标+简介设计 |
- | [references/scan-output-format.md](references/scan-output-format.md) | 脚本/CDP 采集字段定义+输出模板 |
+ | 五份平台参考(链接见「脚本采集模式」第 1 步) | 「确定数据来源」:只读所选平台那份——榜单网址、命令、字段、故障排查、平台分析维度 |
+ | [scripts/aggregate-rank.js](scripts/aggregate-rank.js) | 把输出目录里的原始榜单聚合成短表(`--out` 落盘,`--sample` 抽原始条目,`--json` 机读),主会话只读它 |
| [scripts/cdp-utils.js](scripts/cdp-utils.js) | CDP 公共工具函数(ab/sleep/evalJSON/safeStr/scrollLoad/getArg),各采集脚本共用 |
- | [scripts/fanqie-rank-scraper.js](scripts/fanqie-rank-scraper.js) | 番茄榜单采集,分批请求防超时,带连通性自检+标题解析率质量标注,配合 browser-cdp 使用 |
- | [scripts/qidian-rank-scraper.js](scripts/qidian-rank-scraper.js) | 起点榜单采集(畅销/月票/新书等),默认移动端 SSR 提取,PC/CDP 回退 |
- | [scripts/qimao-rank-scraper.js](scripts/qimao-rank-scraper.js) | 七猫榜单采集(大热/新书/完结等),tab 切换(失败重试)+滚动加载,按 bookId 取书名回填作品页链接,带连通性自检+链接/热度命中率标注 |
- | [scripts/jjwxc-rank-scraper.js](scripts/jjwxc-rank-scraper.js) | 晋江榜单采集(收入金榜/月榜等),按频道分组 |
- | [scripts/ciweimao-rank-scraper.js](scripts/ciweimao-rank-scraper.js) | 刺猬猫榜单采集(点击/收藏/月票等),单页 9 榜提取,按 bookId 归一书名回填作品页链接,带连通性自检+空结果重试+链接命中率标注 |
+ | [scripts/fanqie-rank-scraper.js](scripts/fanqie-rank-scraper.js) | 番茄榜单采集,用法见番茄参考 |
+ | [scripts/qidian-rank-scraper.js](scripts/qidian-rank-scraper.js) | 起点榜单采集,用法见起点参考 |
+ | [scripts/qimao-rank-scraper.js](scripts/qimao-rank-scraper.js) | 七猫榜单采集,用法见七猫参考 |
+ | [scripts/jjwxc-rank-scraper.js](scripts/jjwxc-rank-scraper.js) | 晋江榜单采集,用法见晋江参考 |
+ | [scripts/ciweimao-rank-scraper.js](scripts/ciweimao-rank-scraper.js) | 刺猬猫榜单采集,用法见刺猬猫参考 |
---
## 语言
- 跟随用户的语言回复,用户用什么语言就用什么语言回复
- 中文回复遵循《中文文案排版指北》