← Back to skills
extension
Category: Data & AnalyticsNo API key required

节日数据采集.skill

中国节假日消费数据的专业采集与归集技能。从 holiday-data-report 分离出的采集专用能力:极端强调数据采集效率,围绕 6 类中国节假日(春节/端午/五一/暑期/中秋/十一)按全源 A–J 十组矩阵高效检索、同源双录 L1/L2 数据、保存所获取的网页文件(快照必做)、并统一归集为单一 JSON 文件(仅以 layer 字段区分 L1/L2)。【运行首轮必做:F0 必须主动询问用户是否有历史采集数据路径(见 SKILL.md「交互检查点」),未询问不得开始采集。】v1.2.0 起支持:历史数据叠加整合(import_history 导入存量基线,防'越采越少')+ 预测/实测观测序列化管理(采集时间/观测批次/观测关联三字段,预测实测并存供预期差分析)+ 数据同一性分层判定(L1–L5 去重/并存)。适用于:用户要求采集/搜集/归集某节日消费数据、为节假日消费报告准备数据底座、多次增量采集合并、导入历史采集数据叠加整合、以及任何'先把节日数据采全采好、之后再出报告'的场景。使用场景触发词:节假日数据采集、节日消费数据归集、采集数据为报告备料、历史数据导入叠加。

personAuthor: user_d01bb70bhubcommunity

Holiday Data Fetch(节假日消费数据采集)

概述与定位

本技能是 holiday-data-report(五阶段一体)的采集专用拆分版,只做一件事:高效采集并归集节日消费数据。

  • 只采集归集:不生成报告/真实性说明/首页——那些由 holiday-data-report 消费本技能产物。
  • 核心设计:采集与报告解耦。数据先采集归集为单一 JSON,报告可基于同一 JSON 多次生成,无需重复采集。
  • 唯一产物:holiday-data-fetch.json(L1/L2 统一单文件 JSON)+ snapshots/ 网页快照 + 采集日志.csv。
  • L1/L2 分层保留:沿用原技能双层模型,但合并进一个 JSON 文件,仅以 layer: "L1"/"L2" 字段区分。
  • v1.2.0 三大机制:① 历史数据叠加整合(防"越采越少");② 预测/实测观测序列化管理(预期差分析底座);③ 数据同一性分层判定(L1–L5,去重与并存规则化)。

交互检查点(运行首轮必执行,不可跳过)

以下交互在开始任何检索/采集动作前必须完成,缺失任一即视为流程违规:

  1. 【硬性·第一步】历史数据询问(F0):无论用户是否主动提及,第一轮都必须明确询问是否有过往采集/归集的节日数据。若因用户未主动提供就默认为"没有历史数据"而跳过此问,即属违规(历史数据导入是 v1.2.0 防"越采越少"的核心机制,必须给用户显式的提供机会)。建议话术:

    "是否有过往采集/归集的节日数据(历史版 CSV、旧版 holiday-data-fetch.json、或数据目录)?如有请提供路径,我会先导入为存量基线再采集,避免越采越少;没有的话我直接开始采集。"

    • 用户提供路径 → 执行 scripts/import_history.py 导入(观测批次=H1/H2...),支持多路径/多批次。
    • 用户明确"没有/不用" → 跳过导入,并在回复中注明"本次无历史基线叠加"。
    • 用户不确定/反问 → 提示常见位置(历史采集目录、data_set 目录、旧版 JSON),并说明"可先采集、后续随时再导入叠加"。
  2. 【参数回显】:确认 [年份]/[节假日]/[地域] 后,回显采集范围(见参数解析),再开始采集。

何时使用

触发条件(满足任一即用本技能,而非 holiday-data-report):

  1. 用户要求"采集/搜集/归集"某节日消费数据(如"帮我采集 2026 国庆消费数据")。
  2. 需要为节假日消费报告准备数据底座(先采数据、后出报告)。
  3. 需要多次增量采集合并(跨轮次归集到同一文件)。
  4. 需要把已有节日数据统一整理为单文件 JSON(L1/L2 合并)。
  5. 需要导入历史采集数据叠加整合(v1.2.0 新增:历史版 CSV / v1.0.0 / v1.1.0 JSON 导入为存量基线)。

若用户要求"直接出完整报告四件套",应使用 holiday-data-report;本技能可为其前置数据采集。

参数解析(必先确认)

| 参数 | 默认值 | 说明 | | --- | --- | --- | | [年份] | 当前年 | 如 2026 | | [节假日] | 当前日期所在节假日;无法判定则必须主动询问,不得臆造 | 春节/端午/五一/暑期/中秋/十一 | | [地域] | 全国 | 城市维度本期不强制,字段可扩展 | | [历史数据路径] | 无 | 硬性必问:第一轮必须询问用户是否有过往采集数据(历史版 CSV / v1.0.0 / v1.1.0 JSON / 数据目录)。有则导入叠加为存量基线;无则在回复注明"本次无历史基线叠加"。详见「交互检查点」 |

进入采集前向用户一句话回显:"将采集 [2026][十一][全国] 消费数据,归集为单一 JSON + 网页快照";若已完成历史导入,追加"含历史基线叠加 H1/H2..."。

统一 JSON 数据结构(核心)

单文件 holiday-data-fetch.json:

{
  "schema": "holiday-data-fetch-v1",
  "meta": { "year": 2026, "holiday": "十一", "region": "全国",
            "rounds": ["2026-08-28-R1", "2026-08-28-R2"],
            "history_imports": [{"batch":"H1","source":"...","imported":45,"filtered":12}],
            "counts": {"L1": 45, "L2": 6, "snapshots": 18, "history_imported": 40} },
  "items": [
    { "layer": "L1", "id": "2026-SY-L1-001", "主题": "总体", "数据点": "国内旅游出游人次",
      "数值": 8.03, "单位": "亿人次", "单位粒度": "人次", "统计起止日": "...", "统计窗口": "7天",
      "口径版本": "7天口径", "指标口径类型": "旅游总花费", "口径类型": "官方总量",
      "数据性质": "实际", "基期": "同比", "假期天数": 7, "数值类型": "水平值",
      "采集日期": "...", "缺口标记": "空", "来源机构": "文化和旅游部", "报告/资料名": "...",
      "发布时间": "2026", "可信度等级": "A", "URL": "https://...", "备注": "",
      "内容摘录": "...", "snapshot": "snapshots/xxx.html", "round": "R1", "keywords": "...",
      "地域粒度": "全国", "采集时间": "2026-08-28 14:30", "观测批次": "R1", "数据来源": "本轮采集" },
    { "layer": "L1", "id": "2026-SY-L1-002", "数据性质": "预计", "观测关联": "对照:实测2026-SY-L1-001", ... },
    { "layer": "L2", "id": "2026-SY-L2-001", "现象标签": ["反向旅游"], "主题归属": "景区目的地",
      "现象描述": "...", "数值": "超80%", "单位": "", "数值类型": "定性(区间/约)",
      "素材类型": "榜单/热点", "来源机构": "去哪儿", "来源URL": "https://...", "采集日期": "...",
      "与L1指标键": "", "内容摘录": "...", "snapshot": "...", "round": "R1", "keywords": "..." }
  ]
}
  • L1 条目:22 字段与原技能口径字典完全对齐(可追溯、可纵向比较),另加观测序列字段(采集时间/观测批次/观测关联/数据来源/快照复用)。
  • L2 条目:现象素材(榜单/区间/定性/政策),轻量标签化。
  • 观测序列化管理(v1.2.0):同一指标在节前预测→节后实测产生多个观测值,预测与实测并存不覆盖,通过 观测关联 建立对照(供报告端预期差分析)。历史导入行为 数据来源=历史导入 + 观测批次=H{n},作为存量基线。
  • 完整数据字典见 references/json-schema.md。

采集流程(F0–F5)

F0 初始化与历史导入(硬性交互检查点)

python scripts/init_workspace.py --output-dir <目录> --year <年> --holiday <节> [--region 全国]

  • 已存在则续采模式(打印归集状态),不覆盖。

F0 第一步(不可跳过)— 询问历史数据:见上方「交互检查点」。在向用户完成历史数据询问并得到答复之前,不得开始任何检索/采集。

  • 用户提供路径 → python scripts/import_history.py --workspace holiday-data-fetch.json --source <历史文件或目录> [--keep-snapshots],导入为 观测批次=H{n} 存量基线(多次调用 → H1/H2... 多批次)。
  • 导入报告输出:读取/过滤(待核/污染/无URL)/归一化/去重/新增/预测实测关联条数。
  • 用户明确"没有/不用" → 跳过导入,回复注明"本次无历史基线叠加",仍可继续采集(后续可随时再导入叠加)。

F1 检索矩阵展开

  • 从 references/holiday-keywords.md 取目标节假日的检索词矩阵(总体/交通/消费/出境/新消费 5 类 + 6 大缺口维度)与全源 A–J 侧重。
  • 先导入后检索:基于历史导入报告,优先补齐基线缺口维度(如缺景区/酒店/分省),避免重复采全国总量。
  • 节假日天数/口径先查国务院办公厅放假安排(中秋合并判定)。

F2 并行采集(核心 · 极端强调效率)

  1. 全源铺开:A(政务)必采,B(行业)+C(平台)必采,E/F 至少一组,G/I/J 按特性选采;来源深度:B 组 ≥2 个机构、C 组 ≥3 个平台、地方政务 ≥3 个省市(清单见 references/holiday-keywords.md)。
  2. 多主题并行检索:围绕 9 大主题 + 探索性主题 + 6 大缺口维度(分省/分市、景区/目的地、酒店/住宿、社零/消费总额、支付交易、派生分析指标,检索词见 references/holiday-keywords.md 第五节),逐主题检索(不少于 8 轮)。对历史基线全国级占比 >80% 的组合定向补采省级/城市级,长假组合向丰富线补齐。
  3. 同源双录:可入趋势线的统计值记 L1(22 字段);榜单/区间/定性/政策/热点记 L2。同一来源可同时入 L1 与 L2。推算行按 A/B 分类:A 类(客单价/人均/日均等效/跨年可比/恢复度等有分析价值的派生指标)保留入库、强制 D 级、填 推算依据;B 类(模糊推算/未核实预计/重复换算)不入 L1、降级 L2 或剔除(详见 references/json-schema.md 四·B 节)。
  4. 探索性开放检索:检索词用"新消费热点/消费新业态/新兴消费"宽泛表述,禁止预置具体业态。
  5. 快照必做:每条含 URL 记录,立即拉取正文 → 存 snapshots/{机构}_{标题摘要}.html → 写 内容摘录(详见 references/snapshot-rules.md)。
  6. 旧闻剔除:非目标年度/节假日口径不入库(历史背景可入 L2 备注)。
  7. 每轮产物写临时文件 round_{日期}-R{n}.json(结构同主 JSON,items 为新增条目)。
  8. 预测实测衔接:若基线含节前预测(数据性质=预计)而本轮采到节后实测,按 L2 并存并回填 观测关联(构成预期差分析对)。

F3 增量归集(分层同一性判定)

python scripts/merge_rounds.py --workspace holiday-data-fetch.json --round-file round_xxx.json [--round-id R2]

合并时序:历史基线(H 批次)→ 本轮 rounds 增量 → 预测实测对照回填。按数据同一性分层判定(L1–L5,详见 references/json-schema.md 三·B):

| 层级 | 判定条件 | 处理 | | --- | --- | --- | | L1 同源同载体重采 | URL+报告/资料名+数据点+口径版本+统计窗口+数据性质 全一致 | 去重;同键异值(同本轮)→ 冲突暂存双保留 | | L2 同源异性质并存 | 半键一致但 数据性质 不同(预计 vs 实际) | 并存 + 自动回填 观测关联 | | L3 异源并存 | 数据点+口径一致但 URL/机构不同 | 全部保留 | | L4 异口径并存 | 数据点一致但口径版本/统计窗口不同 | 全部保留 | | L5 跨批次历史导入 | 历史 vs 本轮键一致但批次不同 | 本轮优先更新,历史值入备注"历史值:xxx(H批次)" |

  • 去重:L1 键 (URL, 报告/资料名, 数据点, 口径版本, 统计窗口, 数据性质);L2 键 (现象描述, 来源机构, 来源URL)。
  • 同键不同值 → 冲突暂存(双保留+备注标"双口径/冲突"),绝不静默覆盖。
  • 自动分配 id、更新 meta.rounds/counts/updated_at。多次采集归集到同一文件。

F4 门禁自检

python scripts/validate_fetch.py --workspace holiday-data-fetch.json [--check-snapshots]

  • 校验:行数门禁(基础线:春节/十一≥35、五一/端午/中秋≥25、暑期≥30;丰富线:春节/十一≥60、五一/端午/中秋≥45、暑期≥55;历史导入计入总量)、A+B+C 全源覆盖、字段完整性、推算强制 D 级、指标维度覆盖度(10 个核心维度 ≥7 通过、5–6 WARN、<5 FAIL)、地域粒度分布(全国级 >70% WARN)、快照覆盖率≥80%(仅计本轮,历史导入行单独统计)、丰富度评分(0–100,行数仅计本轮)。
  • v1.2.0 新增统计:本轮新增占比 <40% WARN(防采集偷懒)、预计/实测对照未回填 WARN、同源同载体重复率 WARN、主题/地域粒度枚举白名单校验。
  • 行数达到丰富线标注 [丰富],仅达基础线标注 [基础],未达标注 [不足]。
  • 不达标须声明缺口,禁止静默缺位。

F5 交付

  • 产物:holiday-data-fetch.json + snapshots/ + 采集日志.csv(含观测批次/同源复用列)+(可选导出的 22 字段 CSV / 现象素材库 JSON)。
  • 供 holiday-data-report 阶段二直接消费(layer 过滤即可)。

网页快照(硬性要求)

  • 必做动作,非"尽力而为"。每条含 URL 记录均须:拉正文 → 存快照 → 写摘录。
  • 失败降级:snapshot 标 未存-原因,数据仍入库,内容摘录 兜底,不阻断采集。
  • 命名:snapshots/{来源机构}_{标题摘要}.html。
  • 历史导入行:一律不补抓快照(未存-历史导入),不计入本轮快照覆盖率;--keep-snapshots 导入 v1.0.0/v1.1.0 JSON 时可保留并复制原快照。
  • 同源复用:同一快照被 ≥2 条引用时,非首见条标 快照复用=复用-共{n}条,采集日志 同源复用 列同步标注。
  • 规则详见 references/snapshot-rules.md。

门禁(采集端即达标)

| 门禁 | 标准 | | --- | --- | | 行数(基础线) | 春节/十一≥35、五一/端午/独立中秋≥25、暑期≥30(历史导入计入总量) | | 行数(丰富线) | 春节/十一≥60、五一/端午/独立中秋≥45、暑期≥55(达则标 [丰富]) | | 全源覆盖 | A+B+C 必采;E/F 至少一组;B≥2 机构、C≥3 平台、地方政务≥3 省市 | | 指标维度覆盖 | 10 核心维度(出游人次/旅游收入/交通/社零/支付/出入境/分省/酒店/景区/派生)≥7 PASS、5–6 WARN、<5 FAIL | | 地域粒度 | 全国级 >70% WARN;省+市+景区合计 ≥30% 为推荐目标 | | 推算行占比 | ≤30%(防泛滥);推算/测算/弱溯源/定性强制 D 级 | | 快照覆盖率 | 本轮条目 ≥80%(低于须声明缺口);历史导入行单独统计 | | 本轮新增占比 | <40% WARN(防采集偷懒,历史导入占比过高) | | 预测/实测对照 | 预计行数/实测行数/已回填对照数 统计;存在同键实测未回填 WARN | | 观测重复率 | 同源同载体重复率检查,高则 WARN(L1 去重未生效) | | 数据纪律 | 推算/测算/弱溯源/定性强制 D 级;官方机构发布的「预计」可标 A/B/C(权威性高);平台口径标"该平台自身口径,非全市场" | | 交叉印证 | 新消费入选须 ≥2 不同机构 URL 互链,否则降级"待核实" | | 枚举白名单 | 主题统一 支付交易(禁 支付 双写)、地域粒度统一 景区商圈级(禁 景区级) |

反模式(不可逾越)

  1. 编造数据:无来源数据一律不入库;缺失标 D 级"弱溯源"。
  2. 不附可核验 URL:每条公开数据必须附可点击 URL;付费研报如实标注+替代路径。
  3. 推算当实测:推算/预计值强制 D 级,与实测分栏,不混同。
  4. 口径冲突二选一:官方优先;无法判定则并列说明(冲突暂存)。
  5. 探索性主题预固化:检索词禁止预置具体业态,由结果涌现。
  6. 口径混用未折算:公路人员流动量≠客运量;旅游总花费≠社零;跨年天数不同须附 per-day 等效值。
  7. 虚假交叉印证:单源 C 级不得宣称"≥2 独立来源";未圈定项目不得入报告主叙事。
  8. 快照缺失不记录:快照未存必须标原因,不得静默缺位。
  9. 预测当实测:假期未发生/未发布,预测独立标记 数据性质=预计+缺口标记=预判待回填,不混入实测。
  10. 历史数据丢弃(v1.2.0 新增):有历史基线不导入即覆盖/不采,导致"越采越少";预测与实测必须并存,禁止用新值覆盖旧性质。

资源索引

| 资源 | 用途 | 何时读取 | | --- | --- | --- | | references/holiday-keywords.md | 6 节假日检索词矩阵、全源 A–J、门禁、中秋合并规则、历史导入检索衔接 | F1 阶段必读 | | references/json-schema.md | 统一 JSON 数据字典(L1 22 字段 + L2 + 采集字段 + 观测序列字段 + id 规范 + L1–L5 分层判定 + 历史导入规范) | 采集/归集/导入时对照 | | references/collection-log.md | 采集日志格式、去重/合并/冲突规则、来源分级、历史导入标记、同源复用 | F2/F3 阶段 | | references/snapshot-rules.md | 网页快照命名/下载/失败降级/覆盖率/同源复用/历史行规则 | F2 阶段 | | scripts/init_workspace.py | 初始化/续采工作区 | F0 | | scripts/import_history.py | 历史数据导入器(CSV/v1.0.0/v1.1.0 识别、质量过滤、归一化、分层判定、导入报告) | F0 历史导入 | | scripts/_merge_core.py | 分层同一性判定核心(L1–L5 + 观测关联回填),被合并/导入复用 | F3(内部依赖) | | scripts/merge_rounds.py | 增量归集合并去重(分层判定) | F3 | | scripts/validate_fetch.py | 门禁自检(行数分档/维度覆盖/地域粒度/丰富度评分/观测统计/枚举白名单)+ 导出 22 字段 CSV / 现象素材库 JSON | F4/F5 | | scripts/gen_collection_log.py | 从 JSON 自动生成标准格式采集日志(含观测批次/同源复用列) | F5 | | assets/sample-fetch.json | 统一 JSON 结构示例 | 对照参考 |

兼容性说明

  • 本技能产物可直接供 holiday-data-report 使用:layer=L1 → 22 字段数据集;layer=L2 → 现象素材库;数据性质=预计 行 → 预测台账;观测关联 对 → 预期差分析。
  • 历史数据版本兼容(v1.2.0):历史版 CSV(22 字段)、v1.0.0 / v1.1.0 JSON 均可由 import_history.py 消费,导入后不破坏现有 22 字段结构,validate_fetch.py --export-csv 仍可正常导出。
  • 可选导出:validate_fetch.py --export-csv --export-l2 --out <目录> 一键生成标准 22 字段 CSV 与现象素材库 JSON,无缝衔接原四件套流程。

技能版本:v1.2.0 | 更新日期:2026-08-28 | v1.2.0 修订:F0 历史数据询问升级为硬性交互检查点(新增「交互检查点」章节:第一轮必须主动询问、禁止臆断无历史数据、三种答复分支与话术,description 同步携带交互要求);新增历史数据叠加整合机制(import_history.py 导入存量基线,防"越采越少")、预测/实测观测序列化管理(采集时间/观测批次/观测关联 三字段,预测实测并存供预期差分析)、数据同一性分层判定(L1–L5,_merge_core.py 核心 + merge_rounds.py/import_history.py 复用)、门禁新增本轮新增占比/预测实测对照/观测重复率/枚举白名单、快照覆盖率排除历史导入行、丰富度评分行数仅计本轮、推算/预计等级口径澄清(权威官方预计可 A/B/C)、采集日志新增观测批次/同源复用列、枚举统一(主题 支付交易、地域粒度 景区商圈级)。基线:v1.1.0(6 大缺口维度矩阵、推算 A/B 分类、维度覆盖门禁、基础/丰富双线、地域粒度字段、快照 bug 修复、采集日志自动生成)。