背景

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

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

源代码放在了这里 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(五)Flink 应用部署

环境 代码托管:gitlab CI:tekton CD: tekton pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 应用:K8S Flink 应用需要解决的是任务的灵活增...

阅读全文

CI/CD(四)VM 应用部署

环境 代码托管:gitlab CI:tekton CD: 代码自实现多批次部署 pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 应用:ECS(ESS) 应用部署在弹性...

阅读全文

CI/CD(三)GPU 应用部署(k8s)

环境 代码托管:gitlab CI:tekton CD: ArgoCD pipline/task: 阿里云 serverless容器(spot实例且按秒计费) 应用:k8s GPU应用的特殊性在于单个镜像的大小在...

阅读全文

欢迎留言