学海无涯,旅“途”漫漫,“途”中小记,如有错误,敬请指出,在此拜谢!

前言

最近在工作的业务中,需要对工作日进行判别(比如某件事情计算五个工作日之后的时间,去掉节假日和双休周末)。百度查了很多资料,没有发现什么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篇)相关推荐

  1. python 获取当前日期并判断是否是工作日_通过Python获得相关日期的最近工作日...

    因为工作业务需要,需要判断得到的日期是否是节假日(包括周末),并返回最近的工作日(如果获得的日期就是工作日,则返回该日期本身) 自己实现其实很麻烦,我是通过workalendar这个第三方组件包实现的 ...

  2. 每年工作日与非工作日的设置

    public string GetYear(int year) { if (year == 0) { year = DateTime.Now.Year;  //获取当前年份 } DataTable d ...

  3. 获取某天到某天相隔的时间段的工作日期(包含周末上班时间)和非工作日(包括调休、国家法定节假日)

    在这 ## **获取某天到某天相隔的时间段的工作日期(包含周末上班时间)和非工作日(包括调休.国家法定节假日)** Date.prototype.format = function() {var s ...

  4. sql跳过非工作日(周末和节假日)——转载

    简介:场景1:基于开始日期和工期,推算结束日期. 场景2:基于开始日期和结束日期,计算工期 注:需要自己做界面维护工作日表(s_WorkDay)和节假日表(s_SpecialDay) 涉及到的数据表 ...

  5. 统计两个日期间工作日的天数

    统计两个日期间工作日天数 /*** 将LocalDate转成Date* @param localDate* @return*/public static Date LocalDateToDate(Lo ...

  6. 如何获取全年节假日信息以及计算当前日期属于第几周

    1.某些业务场景需要获取全年哪些天是节假日还是非节假日 比如说出勤. 2.我介绍的这种方式是通过Api调用的方式,通过当前日期来查询是节假日还是非节假日 http://api.goseek.cn/To ...

  7. 统计整年中的非工作日天数

    需求:统计2020年整年的非工作日天数(包含周末和法定节假日) 思路: 1.代码生成一张2020年日历表 2.统计day_type字段 为 3的天数即为整年的非工作日天数(select count(* ...

  8. 获取当月在当天之前的工作日和双休日

    获取当月在当天之前的工作日和双休日 package com.day;import java.text.DateFormat; import java.text.ParseException; impo ...

  9. HIVE如何获取当前日期的前两个工作日

    -- 获取当前日期的前两个工作日是哪天      2022-04-07  llq with tmp as( select cur_date, if_workday, sum(if_workday) o ...

  10. Tushare批量获取各城市股票日度行情数据

    Tushare批量获取各股票行情数据 tushare接口基本设置 1.tushare注册 2.软件准备 3.调用数据库 批量获取股票收盘价 ID:447607 tushare为广大金融分析人员提供了一 ...

最新文章

  1. 第十六周程序阅读(5)
  2. html逻辑判断符,JavaScript中的逻辑判断符、||与!介绍
  3. C#得到CPU的序列号、硬盘序列号、网卡序列号
  4. 基于 WPF 模块化架构下的本地化设计实践
  5. LeetCode 1320. 二指输入的的最小距离(动态规划)
  6. JSP 获取访问者真正的IP地址
  7. java sheet类_java excel 导出 多个sheet
  8. Go 1.8中值得关注的几个变化
  9. 带权有向无环图的最短路径(使用拓扑排序的方法)
  10. 一个按照行来截取显示文章摘要的函数
  11. Oracle数据库安装教程
  12. SpringCloud入门教程(全集)
  13. 利用图神经网络进行社交机器人检测
  14. 香港十大外汇交易平台排名(2021最新版)
  15. 罗永浩写给俞敏洪的信
  16. PhpBazar adid SQL注入漏洞
  17. IPFS何时落地应用?FIL价值破千?
  18. 基于帕累托的多目标遗传算法优化的原理与 Python 实现
  19. Infiniband基本知识
  20. 点击“换一换”切换商品,使用jquery slice()实现无缝连接切换

热门文章

  1. Redis下载与安装
  2. 腾讯 信鸽测试demo
  3. javaweb网上商城系统
  4. Apollo canbus模块学习笔记
  5. 通达OA数据库服务断电无法启动的处理方法(亲测2020-10-07。通达OA2017版本)
  6. Matlab绘图线条颜色,线型,标记点选项参数
  7. OK插件安装常见问题集锦(PowerPoint版)|OneKeyTools Lite安装说明
  8. 基于Springboot+Vue开发建筑工地用料管理系统
  9. vs2017社区版在离线的电脑上注册方法
  10. SOUI消息订阅事件实例