Skip to content

News Crawler Skill 设计概览

设计目标

这套实现不是单纯把“抓新闻”做成一个脚本,而是把以下三件事合并成同一条产品链路:

  1. 新闻来源和分类的结构化配置。
  2. 面向站点消费的统一 JSON 契约。
  3. 能直接被团队阅读和维护的在线文档。

配置分层

文件角色为什么重要
config/categories.json定义五大专区的名称、图标、路径和关注重点页面导航、组件渲染和文档说明都来自这里
config/news_sources.json定义来源、节奏、来源类型和备注用来约束抓取器与来源矩阵,而不是散落在脚本里
scripts/crawl_news.js把配置翻译成可发布的数据产物当前默认优先抓取真实源,并在源失败时按分类兜底
public/api/*.json前端运行时消费的数据站点和 API 契约在同一仓库内闭环

能力拆分

查看 Mermaid 源码
flowchart TD
  A["分类配置"] --> D["统一内容模型"]
  B["来源配置"] --> D
  C["真实源抓取 / 分类兜底脚本"] --> D
  D --> E["latest.json"]
  D --> F["categories/*.json"]
  D --> G["daily/YYYY-MM-DD.json"]
  E --> H["今日总览"]
  F --> I["分类专区页"]
  G --> J["归档与自动化"]

为什么采用“真实源优先 + 分类兜底”

  • 真实抓取链路仍然会受网络、反爬和页面结构变化影响。
  • 站点和自动化不能因为某一个来源失败就整体停摆。
  • 只要输出结构保持一致,真实源、聚合 feed 和分类兜底都可以共存。

统一数据契约

json
{
  "id": "tech-01",
  "title": "企业级 Agent 产品开始进入流程重构阶段",
  "source": "36氪",
  "sourceId": "kr36",
  "category": "tech",
  "categoryName": "科技资讯",
  "url": "https://36kr.com/",
  "summary": "面向页面展示的原始摘要",
  "aiSummary": "更强调结构化判断的摘要",
  "tags": ["Agent", "企业软件"],
  "hotValue": 995000,
  "importance": 9.4,
  "timestamp": "2026-03-24T08:39:00+08:00"
}

设计原则

  • 页面只依赖统一契约,不依赖具体抓取实现。
  • 配置要能解释“为什么有这个专区/来源”,而不只是“如何抓取”。
  • skill 文档要让后来的人能快速判断哪里该加来源、哪里该加页面、哪里该换脚本实现。

News Base 让站点、数据与技能文档共用同一份配置。