背景

工作中经常遇到需要根据作息去做排班系统、跑定时报表任务、统一告警通道、巡检等等场景,之前是比较粗暴的区分周一~周五、周六和周日这样,遇到法定节假日时再手工调整一下
不是自己去调感觉还好,真落到自己头上来整,搞个两次就不想弄了

因此自己就满世界找现成的接口去搞,有点遗憾没找到,这才想着从源头去搞。还好几句爬虫,再上点正则

源代码放在了这里 https://github.com/itnotebooks/chinese-holiday

思路与实现

先看下目标网页内容及排版
https://www.gov.cn/zhengce/content/2022-12/08/content_5730844.htm

看了目标网页,整体思路如下:
1. 请求 BaseSearch url 查询指定年份的放假通知条目
2. 请求第1步查询到的放假通知页面的 URL
3. 分析页面,定位到 id = UCAP-CONTENT 的 div 容器,读取所有的 p 标签条目
4. 通过正则分析每个 p 标签的内容,判断是否为大写数字开头的序号,大写数字开头的序号为具体放假安排
5. 分析具体放假安排,取对应的年月日关键字;通过分析过往几年的通知内容,规律如下:
5.1 休息日还是工作日,会以以下两种文言描述
5.1.1 休息日:放假|补休|调休|公休
5.1.2 工作日:上班
5.2 具体的日期,会以以下三种文言描述:
5.2.1 [xxxx年]x月x日至[xxxx年][x月]x日
5.2.2 x月x日(星期x)、x月x日(星期x)

核心代码示例

调用站内搜索接口获取具体年份安排页面的URL

请求具体年份节假日安排公布页面,获取页面源代码,通过标签ID定位详细内容


如上图所示,对应的处理代码示例如下

逐条内容分析与日期转换

结果展示

将数据落库,封装成接口请求效果展示

查询2023年元旦安排

查询2023-10-08日是否为休息日

查询2023-09-30日是否为休息日

结合巡检任务的自动化处理示例

源代码放在了这里 https://github.com/itnotebooks/chinese-holiday



如果想赏钱,可以用微信扫描下面的二维码,一来能刺激我写博客的欲望,二来好维护云主机的费用; 另外再次标注博客原地址 itnotebooks.com 感谢!

CI/CD(七)镜像全球分发

环境 代码托管:gitlab CI:tekton pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 任务管理:redis 镜像分发工具:crane 效果 核心实现 就近...

阅读全文

CI/CD(六)模型训练发布-追数场景

环境 代码托管:gitlab CI:tekton CD: ArgoCD pipline/task: 阿里云 serverless容器(spot实例按秒计费) Monitor: grafana 应用:K8S 接入流程 配置webhook...

阅读全文

欢迎留言