北京医院编制校招信息自动监控与推送系统

北京医院编制校招信息自动监控与推送系统

项目背景

用户朋友为北京中医药大学2027届应届毕业生,需持续关注北京市公立医院带编制的校招信息。现需要一个自动化脚本,定期从多个渠道抓取招聘更新,去重整理后推送给用户。

核心需求

1. 信息采集

从以下渠道定期抓取招聘公告,重点关注含"编制"“事业编”“事业单位”"公开招聘"等关键词的岗位:

渠道 A:北京市事业单位公开招聘服务平台
  • 地址:https://rsj.beijing.gov.cn/ → “个人办事” → “北京市事业单位公开招聘服务平台”
  • 采集频率:每日 1 次
  • 采集内容:公告标题、发布日期、岗位列表、报名链接
  • 过滤条件:招聘单位包含"医院"“卫生”"中医"等关键词
渠道 B:北京卫生人才网
  • 地址:http://www.bjwsrc.cn/ → “招聘信息” 和 “通知公告” 栏目
  • 采集频率:每日 1 次
  • 采集内容:公告标题、发布日期、所属区/单位、详情链接
  • 过滤条件:岗位涉及中医、中药、针灸、推拿、护理等中医药相关专业
渠道 C:目标医院官网招聘栏目

需监控以下医院的招聘/人才引进页面:

  1. 首都医科大学附属北京中医医院:https://www.bjzhongyi.com/gzb_rczp
  2. 北京中医药大学东直门医院:https://www.dzmyy.com.cn/ (信息公开→招聘信息)
  3. 北京中医药大学东方医院:http://www.dongfangyy.com.cn/ (信息公开→招聘信息)
  4. 中国中医科学院西苑医院:https://www.xyhospital.com/ (人才招聘)
  5. 中国中医科学院广安门医院:https://www.gamhospital.ac.cn/ (人才招聘)
  6. 中国中医科学院望京医院:https://www.wjhospital.com.cn/ (人才招聘)
  7. 北京中医药大学毕业就业网:http://jy.bucm.edu.cn/
  • 采集频率:每日 1 次
  • 采集内容:公告标题、发布日期、岗位名称及专业要求、报名方式及截止日期
渠道 D:区卫健委官网统招信息

需监控以下区卫健委的招聘公告页面:

  1. 西城区卫健委:https://wjw.beijing.gov.cn/ → 搜索西城区相关
  2. 海淀区卫健委
  3. 朝阳区卫健委
  4. 丰台区卫健委
  5. 东城区卫健委
  6. 通州区卫健委
  • 采集频率:每周 2 次(区级统招发布周期较长)
  • 采集内容:统招公告标题、岗位数量、报名时间、报名入口
  • 过滤条件:仅保留含医院及中医药相关岗位的公告
渠道 E:微信公众号(如有能力抓取)
  1. 丁香人才
  2. 卫人就业网
  3. 健康北京(北京市卫健委官方号)
  4. 北京人社
  • 采集频率:每日 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`:微信抓取难度大,建议先关闭,跑通网页渠道后再考虑