获取全年所有非工作日和工作日的脚本(Python篇)
学海无涯,旅“途”漫漫,“途”中小记,如有错误,敬请指出,在此拜谢!
前言
最近在工作的业务中,需要对工作日进行判别(比如某件事情计算五个工作日之后的时间,去掉节假日和双休周末)。百度查了很多资料,没有发现什么api之类的接口,大部分会建议本地建表来进行非工作日的维护。查了好多github和gitee上的代码,看得我一脸懵逼。我这暴脾气就不开心了,自己写一套吧。闲话不多说,上代码。有什么问题的筒子们请在评论区留言。
代码
# coding=utf-8
# !/usr/bin/python
import requests
import json# 从百度的php接口中获取到数据
def catch_url_from_baidu(calcultaion_year, month):headers = {"Content-Type": "application/json;charset=UTF-8"}param = {"query": calcultaion_year + "年" + month + "月","resource_id": "39043","t": "1604395059555","ie": "utf8","oe": "gbk","format": "json","tn": "wisetpl","cb": ""}# 抓取位置:百度搜索框搜索日历,上面的日历的接口,可以在页面上进行核对r = requests.get(url="https://sp0.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php",headers=headers, params=param).textmonth_data = json.loads(r)["data"][0]["almanac"]not_work_day = []for one in month_data:if (one["cnDay"] == '日' or one["cnDay"] == '六'):if ('status' in one):if (one["status"] == "2"):# status为2的时候表示周末的工作日,比如10月10日。即百度工具左上角显示“班”的日期continueelse:# 普通周末时间not_work_day.append(one)continueelse:# 普通周末时间。(接口中,如果左上角没有特殊表示,则不会返回status)not_work_day.append(one)continueif ('status' in one and one["status"] == "1"):# status为1的时候表示休息日,比如10月1日。即百度工具左上角显示“休”的日期not_work_day.append(one)print_info(not_work_day)def print_info(not_work_day):for one in not_work_day:insert_sql = "insert TABLE (YEAR,MONTH,DAY) VALUES (" + one["year"] + "," + one["month"] + "," + one["day"] + ");"print(insert_sql)# print("月:" + one["month"] + "日:" + one["day"])if __name__ == '__main__':# 此处只能算当年之前的,因为国务院是每年12月份才会发布第二年的放假计划,所以此接口对于下一年的统计是错的。eg:2020年11月4日,国务院没有发布21年的放假计划,那查询2021年元旦的时候,元旦那天不显示休息calcultaion_year = "2022"# 因该接口传入的时间,查询了前一个月,当前月和后一个月的数据,所以只需要2、5、8、11即可全部获取到。比如查询5月份,则会查询4,5,6月分的数据calculation_month = ["2", "5", "8", "11"]for one_month in calculation_month:catch_url_from_baidu(calcultaion_year, one_month)
输出结果
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,1);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,2);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,3);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,8);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,9);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,15);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,16);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,22);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,23);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,1,31);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,1);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,2);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,3);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,4);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,5);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,6);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,12);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,13);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,19);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,20);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,26);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,2,27);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,3,5);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,3,6);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,3,12);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,3,13);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,3,19);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,3,20);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,3,26);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,3,27);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,4,3);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,4,4);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,4,5);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,4,9);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,4,10);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,4,16);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,4,17);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,4,23);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,4,30);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,1);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,2);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,3);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,4);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,8);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,14);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,15);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,21);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,22);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,28);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,5,29);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,6,3);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,6,4);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,6,5);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,6,11);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,6,12);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,6,18);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,6,19);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,6,25);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,6,26);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,2);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,3);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,9);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,10);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,16);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,17);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,23);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,24);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,30);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,7,31);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,8,6);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,8,7);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,8,13);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,8,14);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,8,20);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,8,21);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,8,27);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,8,28);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,9,3);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,9,4);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,9,10);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,9,11);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,9,12);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,9,17);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,9,18);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,9,24);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,9,25);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,1);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,2);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,3);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,4);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,5);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,6);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,7);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,15);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,16);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,22);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,23);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,29);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,10,30);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,11,5);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,11,6);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,11,12);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,11,13);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,11,19);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,11,20);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,11,26);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,11,27);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,12,3);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,12,4);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,12,10);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,12,11);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,12,17);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,12,18);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,12,24);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,12,25);
insert TABLE (YEAR,MONTH,DAY) VALUES (2022,12,31);
经验证,问题不大
注意事项
1.本抓包是从如图所示的接口进行抓包的,抓完之后可以验证下。
2.还是要强调一点:经验证,国家每年11-12月才会发布对应的第二年的放假安排,所以如果还没发布,你抓后面几年的时间是不行的哈!!这样你就没有法定假日了。当然,节假日还要加班的另算!
3.如果哥们你是996计算方案,请更改catch_url_from_baidu方法里面的for循环的if语句就行了。如果兄弟你是007,请print(“365天全年加班”)即可,当然闰年是366天,注意别忘了。
源码
源码我放在了码云上,各位可以瞅瞅
https://gitee.com/doubletreelin/my-python-tools
获取全年所有非工作日和工作日的脚本(Python篇)相关推荐
- python 获取当前日期并判断是否是工作日_通过Python获得相关日期的最近工作日...
因为工作业务需要,需要判断得到的日期是否是节假日(包括周末),并返回最近的工作日(如果获得的日期就是工作日,则返回该日期本身) 自己实现其实很麻烦,我是通过workalendar这个第三方组件包实现的 ...
- 每年工作日与非工作日的设置
public string GetYear(int year) { if (year == 0) { year = DateTime.Now.Year; //获取当前年份 } DataTable d ...
- 获取某天到某天相隔的时间段的工作日期(包含周末上班时间)和非工作日(包括调休、国家法定节假日)
在这 ## **获取某天到某天相隔的时间段的工作日期(包含周末上班时间)和非工作日(包括调休.国家法定节假日)** Date.prototype.format = function() {var s ...
- sql跳过非工作日(周末和节假日)——转载
简介:场景1:基于开始日期和工期,推算结束日期. 场景2:基于开始日期和结束日期,计算工期 注:需要自己做界面维护工作日表(s_WorkDay)和节假日表(s_SpecialDay) 涉及到的数据表 ...
- 统计两个日期间工作日的天数
统计两个日期间工作日天数 /*** 将LocalDate转成Date* @param localDate* @return*/public static Date LocalDateToDate(Lo ...
- 如何获取全年节假日信息以及计算当前日期属于第几周
1.某些业务场景需要获取全年哪些天是节假日还是非节假日 比如说出勤. 2.我介绍的这种方式是通过Api调用的方式,通过当前日期来查询是节假日还是非节假日 http://api.goseek.cn/To ...
- 统计整年中的非工作日天数
需求:统计2020年整年的非工作日天数(包含周末和法定节假日) 思路: 1.代码生成一张2020年日历表 2.统计day_type字段 为 3的天数即为整年的非工作日天数(select count(* ...
- 获取当月在当天之前的工作日和双休日
获取当月在当天之前的工作日和双休日 package com.day;import java.text.DateFormat; import java.text.ParseException; impo ...
- HIVE如何获取当前日期的前两个工作日
-- 获取当前日期的前两个工作日是哪天 2022-04-07 llq with tmp as( select cur_date, if_workday, sum(if_workday) o ...
- Tushare批量获取各城市股票日度行情数据
Tushare批量获取各股票行情数据 tushare接口基本设置 1.tushare注册 2.软件准备 3.调用数据库 批量获取股票收盘价 ID:447607 tushare为广大金融分析人员提供了一 ...
最新文章
- 第十六周程序阅读(5)
- html逻辑判断符,JavaScript中的逻辑判断符、||与!介绍
- C#得到CPU的序列号、硬盘序列号、网卡序列号
- 基于 WPF 模块化架构下的本地化设计实践
- LeetCode 1320. 二指输入的的最小距离(动态规划)
- JSP 获取访问者真正的IP地址
- java sheet类_java excel 导出 多个sheet
- Go 1.8中值得关注的几个变化
- 带权有向无环图的最短路径(使用拓扑排序的方法)
- 一个按照行来截取显示文章摘要的函数
- Oracle数据库安装教程
- SpringCloud入门教程(全集)
- 利用图神经网络进行社交机器人检测
- 香港十大外汇交易平台排名(2021最新版)
- 罗永浩写给俞敏洪的信
- PhpBazar adid SQL注入漏洞
- IPFS何时落地应用?FIL价值破千?
- 基于帕累托的多目标遗传算法优化的原理与 Python 实现
- Infiniband基本知识
- 点击“换一换”切换商品,使用jquery slice()实现无缝连接切换