石家庄市教育考试院 · 最新消息抓取
把官网公告抓成结构化数据,再渲染成一份自带搜索与筛选的单文件 HTML,用于日报、盯公告、给家长转发。
核心原则
不要解析首页 HTML 拿列表。 站点自己有列表接口,一次能翻 488+ 条历史公告;首页静态 HTML 只有最近 10 条且受改版影响。详情页可以解析正文,接口不行(需要登录 token)。
数据源
| 用途 | 方式 | 说明 |
|---|---|---|
| 公告列表 | POST http://www.sjzjyksxx.com.cn/api/webSite/article/getPageArticleList |
form 参数 pageNum、pageSize(≤50);code 是字符串 "200";列表在 result.content,总数在 result.totalSize |
| 文章正文 | GET 文章 url,取 div.article > div.paragraph 内文本 |
仅站内文章(/article/...)可用;外链是河北省教育考试院,不要抓 |
| 详情接口 | getArticleById |
返回 401,需登录,不要使用 |
字段、示例响应、HTML 兜底解析选择器见 references/api_reference.md。
标准流程
-
抓取(默认 2 页 40 条,够覆盖近 2~3 个月)
bash python3 scripts/fetch_news.py --pages 3
输出 JSON 默认落到~/.workbuddy/data/sjz-jyks-news/latest.json,并打印本次条数、新增条数、最新一条标题。 -
渲染 HTML
bash python3 scripts/render_html.py ~/.workbuddy/data/sjz-jyks-news/latest.json \ -o ./考试院最新消息-$(date +%Y%m%d).html
产物是单文件、零外部依赖(无 CDN、无字体外链),双击即可离线打开。 -
交付:用
present_files把 HTML 展示给用户,并在回复里点明——本次条数、新增条数、最新一条公告的标题和日期、是否有需要立刻关注的报名/考试节点。
参数
fetch_news.py
| 参数 | 默认 | 作用 |
|---|---|---|
--pages |
2 | 抓取页数(每页 20 条) |
--page-size |
20 | 每页条数,上限 50 |
--out |
~/.workbuddy/data/sjz-jyks-news/latest.json |
JSON 输出路径 |
--state |
~/.workbuddy/data/sjz-jyks-news/seen.json |
已见条目记录,用于判定「新增」 |
--no-state |
关 | 不读写状态,所有条目标为非新增 |
--detail-limit |
0 | 为前 N 条站内文章抓取正文摘要(写入 content_text) |
render_html.py
| 参数 | 默认 | 作用 |
|---|---|---|
json_path |
必填 | 上一步的 JSON |
-o/--out |
./考试院最新消息-YYYYMMDD.html |
HTML 输出路径 |
--top |
0(全部) | 只保留最新 N 条 |
--title |
最新招考消息 | 页面主标题 |
--open |
关 | 生成后用默认浏览器打开 |
"新增"是怎么判定的
fetch_news.py 把 articleId 累积写进 seen.json。首次运行没有基线,全部条目不标 NEW,只有第二次之后才标出真正新出现的公告——避免第一次给用户满屏 NEW。若用户想看"和上次相比新增了哪些",直接跑即可;若用户要纯净快照,加 --no-state。
输出与命名
- 文件名带日期:
考试院最新消息-20261027.html,放在当前工作目录。 - 页面包含:抓取时间 / 覆盖区间 / 站点累计条数、收录数与新增数统计、来源筛选、关键词搜索(
/聚焦、Esc清空)、只看新增、NEW 角标、页脚数据来源与免责说明。
注意事项
- 站点是
http,没有 https,别把链接改写成 https(会连不上)。 contentSource有同义写法(如「石家庄教育考试院」缺「市」),脚本已归一为规范名,否则来源筛选会被拆成多个标签。- 站点为政务网站:单次抓取控制在数页,定时监控间隔建议 ≥1 小时,不要并发轰炸。
- 报告里的时间、资格条件、报名入口一律以官网原文为准——页脚已写明,回复时也要提醒用户核对原文。
- 接口异常(返回非 JSON、
code != 200)时脚本会报错退出;此时按references/api_reference.md的 HTML 兜底方案解析首页。