唐山小升初政策智库(成品站)
定位
一个可直接双击打开的纯静态站,把「小学 + 初中段」的升学政策信息做成可回溯原文的查询工具:
- 官方资讯按热度推上首页,每日自动更新
- 学区划片、学校电话、指标名额都能点回官方原文
- 本地教育账号(抖音 / 视频号)热点榜,按评论 / 转发 / 点赞 / 时效排序
- 右下角 AI 助手,站内知识检索问答,能直接问电话、划片、指标名额
核心不是排版,是可信度纪律:只收政府 / 教育局 / 学校官方源;官方没公开的字段留空写明原因,不推算、不编造;尤其不写「升学率」(官方禁止公布),但「指标名额分配表」必须写(官方每年逐校公布,直接给出「校内第几名以内有指标资格」)。
目录结构
xsc-policy-hub/ # 本站根目录(成品)
├── index.html # 单页应用入口(双击即可打开)
├── assets/
│ ├── app.js # 应用层(板块渲染、路由、交互)
│ ├── data.js # ★ 数据层:所有地域内容与文案都在这里
│ ├── data-feed.js # 由 collect.py 生成,不要手改
│ ├── data-hot.js # 由 collect_hot.py 生成,不要手改
│ ├── data-feigua.js # 由 collect_feigua.py 生成,不要手改
│ ├── ai.js # AI 助手(站内检索 + 可选真模型)
│ └── styles.css
├── config/
│ ├── sources.json # 官方资讯源注册表(41 源)
│ └── hot-sources.json # 本地教育账号登记 + 热点过滤词表
├── data/
│ ├── wechat-inbox.txt # 官方公众号投递箱(人工贴文)
│ └── hot-inbox.txt # 抖音/视频号热点投递箱(人工贴条目)
├── scripts/
│ ├── collect.py # 官方资讯采集 + 去重 + 热度排序
│ ├── collect_hot.py # 热点池解析 + 互动打分 + 排序
│ ├── collect_feigua.py # 飞瓜公开榜回扫,建本地教育账号档案
│ ├── daily.py # 每日编排:串行跑上面三个采集器
│ ├── build_zhongkao.py # 指标名额表生成器(改数据必须改脚本重生成)
│ └── check_site.py # 交付自检(占位残留 / 条数 / 可回溯性)
└── references/ # 方法论文档(见下)
板块
| 板块 | 路由 | 关键内容 |
|---|---|---|
| 总览 | #/overview |
hero + 今日要闻 TOP 10 + 本地热点缩略块 + 五步流程 + 三个坑 |
| 每日资讯 | #/feed |
全量分页、时间窗/来源/分类筛选、搜索、源状态表(覆盖小学+初中段) |
| 本地热点 | #/hot |
今日热点 TOP 10(抖音/视频号)+ 投递台 + 本地教育账号档案 |
| 政策文件 | #/policy |
省市区三级文件,带文号与原文链接 |
| 学区划片 | #/zone |
小区→初中反查 + 区县切换 + 区内搜索 |
| 升学参考 | #/score |
指标名额表(四校名额/覆盖率/位次门槛)+ 指标到校解读 + 口径说明 |
| 学校电话 | #/phones |
按区筛选、一键复制、含区局监督电话 |
| 政策动态 | #/news |
招生季时间线,每条带日期/来源/核验等级/链接 |
| 常见问题 | #/faq |
十问十答 |
| 数据说明 | #/about |
来源清单 + 局限与缺口 + 免责声明 |
右下角常驻 AI 助手 i 按钮,点开即可站内问答;想接真模型,在页面里设 window.AI_CONFIG = {endpoint, apiKey, model} 走 OpenAI 兼容端点,模型挂了自动退回本地检索。
每日更新流水线
python scripts/daily.py # 串行跑:官方资讯 + 热点池 + 飞瓜档案
python scripts/daily.py --offline # 只重算热度、不联网,调权重时用这个
daily.py 会依次调用:
collect.py—— 抓 41 个官方源,重算热度,写assets/data-feed.jscollect_hot.py—— 读data/hot-inbox.txt,按「24%评论 + 16%转发 + 20%点赞 + 40%时效」排序,写assets/data-hot.jscollect_feigua.py—— 回扫飞瓜唐山日榜 180 天,建教育账号档案,写assets/data-feigua.js
配定时任务(每天 10:20 跑 daily.py)即可保证 10:50 前完成当日更新。抓取失败不要删历史、不要编造条目;受限源在页面「源状态」表里如实体现,不要改 status 去掩盖。
热度公式
- 官方资讯:
26%决策价值 + 28%时效 + 16%本地影响 + 22%讨论热度 + 8%权威层级(详见references/heat-formula.md) - 本地热点:
24%评论 + 16%转发 + 20%点赞 + 40%时效,36 小时半衰期;评论权重最高(点赞划过就点,评论要打字)
内容范围与过滤纪律
两个板块都覆盖小学 + 初中段(含中考),不收录高考 / 中职 / 考研 / 幼儿园等非本学段。关键边界:「高中」不是否决词——初中段核心内容(指标到校、中考录取线、示范高中)标题天然带「高中」二字,真正的学段边界是「高考」。过滤词表在 config/hot-sources.json 的 filters 与 scripts/collect.py 的 COMPULSORY_KEEP/DROP,改完用 --offline 重跑验证。
迁移到其他城市
本目录是「唐山」成品实例。要复用到另一座城市:
- 改
assets/data.js的meta(城市名、区县、学校、划片、电话、指标名额、时间线、FAQ)——所有地域文案都在这,app.js基本城市无关 - 改
config/sources.json(官方源)+config/hot-sources.json(本地账号) - 清空
data/wechat-inbox.txt、data/hot-inbox.txt重新投递 python scripts/collect.py重新生成assets/data-feed.js- 指标名额表改
scripts/build_zhongkao.py后重生成
自检
python scripts/check_site.py --dir .
会检查 TODO/示例残留、板块条数下限、时间线/政策文件必备字段、学校 district 引用、源注册表合法性、资讯流状态。跑到 0 error 才算完成。
依赖
- Python 3.8+,需要
lxml(pip install lxml),其余标准库 check_site.py需要 node 执行 data.js;找不到 node 会降级为文本级检查- 采集端不需要浏览器;JS 渲染的站点登记为
js并说明,不要为此引入 Playwright
参考文档
references/data-schema.md—— data.js 字段与约束references/source-discovery.md—— 官方源探测方法与 status 判定references/research-playbook.md—— 各板块检索打法与核验纪律(含「升学率不能写,改用什么」)references/heat-formula.md—— 热度公式、调参与去重陷阱references/sources-tangshan.md—— 唐山实测源清单(含被拦/JS/同名区县陷阱)