北京医院编制校招信息自动监控与推送系统
项目背景
用户朋友为北京中医药大学2027届应届毕业生,需持续关注北京市公立医院带编制的校招信息。现需要一个自动化脚本,定期从多个渠道抓取招聘更新,去重整理后推送给用户。
核心需求
1. 信息采集
从以下渠道定期抓取招聘公告,重点关注含"编制"“事业编”“事业单位”"公开招聘"等关键词的岗位:
渠道 A:北京市事业单位公开招聘服务平台
- 地址:https://rsj.beijing.gov.cn/ → “个人办事” → “北京市事业单位公开招聘服务平台”
- 采集频率:每日 1 次
- 采集内容:公告标题、发布日期、岗位列表、报名链接
- 过滤条件:招聘单位包含"医院"“卫生”"中医"等关键词
渠道 B:北京卫生人才网
- 地址:http://www.bjwsrc.cn/ → “招聘信息” 和 “通知公告” 栏目
- 采集频率:每日 1 次
- 采集内容:公告标题、发布日期、所属区/单位、详情链接
- 过滤条件:岗位涉及中医、中药、针灸、推拿、护理等中医药相关专业
渠道 C:目标医院官网招聘栏目
需监控以下医院的招聘/人才引进页面:
- 首都医科大学附属北京中医医院:https://www.bjzhongyi.com/gzb_rczp
- 北京中医药大学东直门医院:https://www.dzmyy.com.cn/ (信息公开→招聘信息)
- 北京中医药大学东方医院:http://www.dongfangyy.com.cn/ (信息公开→招聘信息)
- 中国中医科学院西苑医院:https://www.xyhospital.com/ (人才招聘)
- 中国中医科学院广安门医院:https://www.gamhospital.ac.cn/ (人才招聘)
- 中国中医科学院望京医院:https://www.wjhospital.com.cn/ (人才招聘)
- 北京中医药大学毕业就业网:http://jy.bucm.edu.cn/
- 采集频率:每日 1 次
- 采集内容:公告标题、发布日期、岗位名称及专业要求、报名方式及截止日期
渠道 D:区卫健委官网统招信息
需监控以下区卫健委的招聘公告页面:
- 西城区卫健委:https://wjw.beijing.gov.cn/ → 搜索西城区相关
- 海淀区卫健委
- 朝阳区卫健委
- 丰台区卫健委
- 东城区卫健委
- 通州区卫健委
- 采集频率:每周 2 次(区级统招发布周期较长)
- 采集内容:统招公告标题、岗位数量、报名时间、报名入口
- 过滤条件:仅保留含医院及中医药相关岗位的公告
渠道 E:微信公众号(如有能力抓取)
- 丁香人才
- 卫人就业网
- 健康北京(北京市卫健委官方号)
- 北京人社
- 采集频率:每日 1 次
- 说明:微信渠道抓取难度较大,若无法实现可降级为仅监控前四个网页渠道
2. 数据处理
去重逻辑
- 以"公告标题 + 发布日期 + 来源渠道"组合为唯一标识
- 同一公告在不同渠道出现时,保留信息最完整的来源,其他标记为重复
- 已推送过的信息不再重复推送,维护已推送记录(本地存储,SQLite 或 JSON 文件)
信息提取与结构化
每条招聘信息提取以下字段:
- 公告标题
- 发布日期
- 来源渠道(平台名称)
- 详情链接(URL)
- 招聘单位
- 岗位数量(如有)
- 专业要求(是否涉及中医药相关专业)
- 招聘对象(应届生/社会人员/不限)
- 户口要求(是否要求京籍)
- 报名起止日期
- 报名方式(网址/邮箱/现场)
- 是否明确含编制(是/否/未注明)
智能标注
- 🟢 编制明确:公告中明确出现"事业编制""编制内"等字样
- 🟡 编制待确认:公告中出现"事业单位公开招聘"但未明确写编制,或为卫健委统招(通常有编)
- 🔴 非编制:公告明确写"非事业编"“合同制”"派遣"等
- ⭐ 推荐标记:同时满足"编制明确/待确认 + 招收应届生 + 中医药相关专业"的岗位
3. 推送机制
推送方式
- 方式一(优先):邮件推送,发送至用户指定邮箱
- 方式二(备选):通过 Server酱 / Bark / 企业微信机器人 等推送到微信
- 方式三(兜底):生成 Markdown 文件存至本地指定目录
推送频率
- 每日汇总推送 1 次,时间为每日 18:00
- 如当日无新信息,发送"今日无新增校招信息"的简短通知
推送格式(Markdown)
📋 北京医院编制校招日报 - 2026-07-07
━━━━━━━━━━━━━━━━━━
⭐ 重点推荐(编制 + 应届生 + 中医药相关)
1.【编制明确】首都医科大学附属北京中医医院2026年公开招聘 📅 发布:2026-07-05 🏥 岗位:中医岗3人、中药岗2人 👥 招聘对象:应届毕业生 📋 户口:非京生源可报 ⏰ 报名截止:2026-07-20 🔗 详情:https://… 📌 报名方式:官网在线投递
━━━━━━━━━━━━━━━━━━
🟢 编制明确
2.【编制明确】西城区卫健系统2026年第二批公开招聘 📅 发布:2026-07-06 🏥 岗位:共150个岗位(含广安门中医院等) 👥 招聘对象:应届生 + 社会人员 📋 户口:应届生不限,社会人员需京籍 ⏰ 报名截止:2026-07-25 🔗 详情:https://… 📌 报名方式:北京卫生人才网在线报名
━━━━━━━━━━━━━━━━━━
🟡 编制待确认
(当日无新增)
━━━━━━━━━━━━━━━━━━
📍 数据来源:事业单位公开招聘平台 / 北京卫生人才网 / 各医院官网 / 区卫健委 📊 本次新增 2 条,累计监控 47 条,已过期移除 12 条
4. 定时执行
- 使用 cron 或系统定时任务,每日 17:30 触发抓取,18:00 完成整理并推送
- 首次运行时,抓取各渠道最近 30 天的公告作为基线数据,但不推送(仅入库存档)
- 从第二次运行开始,仅推送相对基线新增的信息
5. 异常处理
- 网页结构变化导致抓取失败时,记录错误日志并在推送中附加告警:“⚠️ 渠道X抓取异常,请人工检查”
- 推送失败时(如邮件发送失败),将内容写入本地文件
./failed_pushes/YYYY-MM-DD.md并在下次推送时附带提醒 - 网络超时重试 3 次,间隔 10s
技术要求
语言与框架
- Python 3.10+
- 网页抓取:requests + BeautifulSoup,必要时使用 Playwright 处理动态页面
- 数据存储:SQLite(轻量本地库)
- 定时任务:APScheduler 或系统 cron
- 推送:smtplib(邮件)+ requests(Server酱/Bark等)
配置文件
使用config.yaml管理所有可配置项:
# 推送配置push:method:email# email / serverchan / bark / wecom / local_fileemail:smtp_host:smtp.xxx.comsmtp_port:465sender:xxx@xxx.compassword:xxxreceiver:xxx@xxx.comserverchan:sendkey:xxxbark:url:https://api.day.app/xxxlocal_file:output_dir:./output# 监控渠道开关channels:platform_bjrsj:true# 北京市事业单位公开招聘平台bjwsrc:true# 北京卫生人才网hospital_official:true# 各医院官网district_wjw:true# 区卫健委wechat:false# 微信公众号(默认关闭,难度大)# 抓取频率(小时)schedule:platform_bjrsj:24bjwsrc:24hospital_official:24district_wjw:48wechat:24# 过滤关键词filter:include_keywords:-中医-中药-针灸-推拿-骨伤-康复-护理-药学-医学-卫生-医院exclude_keywords:-合同制-劳务派遣-非事业编-科研助理-博士后# 专业匹配(用户朋友的专业,根据实际情况修改)target_majors:-中医学-中药学-针灸推拿学-中医骨伤科学-中西医临床医学# 数据存储storage:db_path:./data/jobs.dblog_path:./logs/ 项目结构 beijing-hospital-job-monitor/ ├── config.yaml# 配置文件├── main.py# 主入口:调度抓取 → 处理 → 推送├── crawlers/ │ ├── base.py# 爬虫基类│ ├── bjrsj_platform.py# 北京市事业单位公开招聘平台│ ├── bjwsrc.py# 北京卫生人才网│ ├── hospital_official.py# 各医院官网│ ├── district_wjw.py# 区卫健委│ └── wechat.py# 微信公众号(可选)├── processor/ │ ├── dedup.py# 去重逻辑│ ├── extractor.py# 信息提取与结构化│ └── tagger.py# 编制标注 + 推荐标记├── pusher/ │ ├── base.py# 推送基类│ ├── email_pusher.py# 邮件推送│ ├── serverchan.py# Server酱推送│ ├── bark.py# Bark推送│ └── local_file.py# 本地文件输出├── db/ │ ├── models.py# 数据模型│ └── store.py# SQLite 读写├── templates/ │ └── daily_report.md# 推送模板├── data/# 数据库文件目录├── logs/# 日志目录├── output/# 本地文件推送目录└── requirements.txt 注意事项 反爬策略:各渠道均为政务/事业单位网站,请求频率控制在合理范围(每次请求间隔 ≥ 3 秒),设置合理的 User-Agent 动态页面:北京市事业单位公开招聘平台可能使用动态加载,如 requests 无法获取内容,切换为 Playwright 编码问题:部分政务网站使用 GBK 编码,注意响应内容的编码处理 数据安全:config.yaml 中含邮箱密码等敏感信息,加入 .gitignore 长期维护:网页结构可能变化,每个爬虫模块需做好异常捕获,单个渠道失败不影响其他渠道运行---这份需求文档覆盖了渠道、抓取逻辑、数据处理、推送格式和项目结构。你发给 Codex 后,它可以根据这个规格直接生成可运行的代码。有几个地方你可能需要根据实际情况调整:-`target_majors`:填入你朋友的实际专业-`push.method`:选一个你最方便的推送方式-`channels.wechat`:微信抓取难度大,建议先关闭,跑通网页渠道后再考虑