SKILL.md 5.8 KB

trend-scout-cn Skill Definition

1. 任务目标

采集并监控中国主流社交媒体平台的实时趋势数据,输出结构化、标准化的趋势情报。覆盖平台包括:bilibili(B站)、baidu(百度)、toutiao(头条)、zhihu(知乎)、douban(豆瓣)、weibo(微博)、douyin(抖音)、xiaohongshu(小红书)、jjwxc(晋江)。

2. 数据准确性规范

2.1 必填字段 (required fields)

每条趋势记录必须包含以下核心字段:

  • platform — 来源平台标识
  • rank — 排名序号
  • topic — 话题/标题文本
  • category — 内容分类
  • source_url — 原始链接
  • timestamp — 数据发布时间
  • crawl_time — 采集时间

2.2 可选字段

  • hot_value — 热度值(数值型,缺失或非法时回退为 0)
  • author — 作者/UP主(允许空字符串或匿名用户)
  • likes — 点赞/互动数
  • duration — 持续时长或内容周期

2.3 边界数据处理

  • null 回退:当 hot_value 为 null、非法字符串或负数时,默认值回退为 0。
  • 空字符串保留:topic 或 author 解析到空字符串时保留空字符串,不报错、不截断。
  • 超长标题:标题字段完整透传,不进行截断处理。
  • 原始空格保留:知乎 display_query 包含空格时保留原始空格格式。
  • HTML 实体解码:对百度等 HTML 片段进行 HTML 实体解码(HTML escape 解码)。

3. 反爬策略 (Anti-Crawl Strategy)

3.1 请求头配置

  • User-Agent 轮换 (UA 轮换):维护 UA 池,每次请求随机切换 User-Agent。
  • Referer / Origin:根据目标平台设置正确的 referer 和 origin。
  • Accept-Encoding:支持 gzip 压缩传输。

3.2 频率控制

  • 请求间隔 (delay):单一平台请求间隔 >= 2秒,推荐使用 3-5秒 间隔。
  • Rate Limit:每分钟请求不超过 20次,超出时主动等待或切换代理。

3.3 robots.txt 与合规

  • 采集前检查目标站点 robots.txt 规则。
  • 不采集用户隐私数据(PII),如手机号、uid 等敏感信息。
  • 数据保留期不超过 90天。

4. Schema 标准化

4.1 统一趋势数据结构

所有平台输出必须统一为 schema 标准化格式,字段使用 snake_case:

{
  "platform": "bilibili",
  "rank": 1,
  "topic": "",
  "hot_value": 0,
  "category": "",
  "trend_direction": "up|down|stable",
  "trend_change": "0",
  "source_url": "https://b23.tv/BVxxx",
  "timestamp": "2026-04-13T10:00:00Z",
  "crawl_time": "2026-04-13T10:00:00Z",
  "author": "",
  "likes": 0
}

4.2 时间格式

  • timestamp 和 crawl_time 统一使用 ISO 8601 格式(YYYY-MM-DDTHH:mm:ssZ)。

4.3 趋势方向枚举

  • trend_direction 只允许 "up"、"down"、"stable" 三个值。
  • 当 trend_change 为异常值(如 "N/A")时,异常值处理规则为将 trend_direction 强制回退为 "stable"。

5. 平台覆盖与解析规则

5.1 bilibili / B站

  • 来源:https://api.bilibili.com/x/web-interface/popular
  • 关键字段:bvid、title、owner.name、stat.view、stat.like、tnamev2
  • 视频链接构造:https://b23.tv/{bvid}

5.2 baidu / 百度

  • 来源:https://top.baidu.com/board?tab=realtime
  • HTML 解析 <div class="content_1YWB0"> 提取 matched_query / 热词
  • 搜索链接:https://www.baidu.com/s?wd={keyword}

5.3 toutiao / 头条

  • 来源:https://www.toutiao.com/hot-event/hot-board/
  • 解析 JSON 片段中的 Title 和 HotValue

5.4 zhihu / 知乎

  • 来源:https://www.zhihu.com/api/v4/search/top_search
  • 优先使用 display_query 保留原始空格
  • 搜索热词页回退:zhihu_hot_list_html

5.5 douban / 豆瓣

  • 来源:https://movie.douban.com/chart
  • 解析 <td class="title"> 中的 title 属性
  • 回退源:douban_chart_html

5.6 weibo / 微博

  • 来源:https://weibo.com/ajax/side/hotSearch 或 https://m.weibo.cn
  • 字段:word、rank、raw_hot、category

5.7 douyin / 抖音

  • 来源:https://www.douyin.com/hot
  • 字段:word、position、hot_value、label

5.8 xiaohongshu / 小红书

  • 来源:https://www.xiaohongshu.com/search_result?keyword=(xhs 搜索页)
  • 回退解析:xhs_search_notes_html

5.9 jjwxc / 晋江

  • 来源:HTML 榜单页
  • 允许 title 和 author 解析为空字符串时直接保留,不报错。

6. 异常降级与容错

6.1 错误码处理

  • 403 Forbidden:增加延迟并触发 UA 轮换,执行 retry_with_backoff(指数退避重试)。
  • 418:微博主端点 418 时,触发 fallback 降级到 weibo_hot_search_mobile 端点。
  • 401:知乎 API 需登录态时,降级到 zhihu_hot_list_html 进行 HTML 页面解析(登录态缺失处理)。
  • 500:服务端异常时,5分钟后重试并切换代理。
  • 200 但 Access Denied:豆瓣返回拦截页时,检查 Cookie 或切换 IP,随后降级到 douban_chart_html。

6.2 空记录处理 (EMPTY_RECORD)

当 title、word 等核心字段为空时,标记为 EMPTY_RECORD,消息为"跳过缺失必填字段的记录",action 为 continue,跳过该条继续采集。

6.3 HTML 解析容错

  • 非 JSON 响应(HTML 页面)时启用 html解析 模式。
  • 解析异常时记录错误日志,不中断整体采集流程。

7. 去重策略 (Dedup)

  • 使用 md5(platform + topic + timestamp) 或 md5(topic) 作为去重键计算签名。
  • 对重复记录执行去重,输出 kept、removed、remaining_platforms 和去重原因。

8. 洞察提取

  • trend_direction 和 trend_change 用于判断话题升温/降温趋势。
  • hot_value(热度值)作为跨平台热度对比的量化指标。
  • 评论区情感分析提取:槽点 (pain_point) 与期待点 (expectation)。