找回密码
 会员注册
查看: 29|回复: 0

Python:使用chinesecalendar获取中国节假日判断工作日和节假日

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
69864
发表于 2024-9-10 07:10:03 | 显示全部楼层 |阅读模式
目录现有方案:chinesecalendar基于网络的方案使用china-calendar现有方案:chinesecalendar使用chinesecalendar库可以实现:判断一天是不是法定节假日/法定工作日(查看节假日安排)https://pypi.org/project/chinesecalendar/https://github.com/LKI/chinese-calendar/安装pipinstallchinesecalendar1使用示例importdatetime#判断2018年4月30号是不是节假日fromchinese_calendarimportis_holiday,is_workdayapril_last=datetime.date(2018,4,30)assertis_workday(april_last)isFalse1234567缺点:1、更新不及时,或需要手动更新才能判断,由于次年的节假日安排,取决于国务院发布的日程。所以本项目一般会在国务院更新以后,发布新的版本。按照以往的经验,一般是每年的11月前后发布新版本。2、支持的版本有点高,Python::3.8起步,不支持低版本基于网络的方案可以使用现有的维护的比较好的网站数据,比如:https://wannianrili.bmcx.com/,通过网页请求解析获取日历数据,这样就能获取到实时的数据,缺点也很明显,需要网络请求,如果考虑性能的场景下,可能不适用。依赖两个第三方库:pipinstallrequestsparsel1代码文件,可以放到项目的utils工具包内#-*-coding:utf-8-*-"""@File:calendar_util.py@Date:2024-04-03"""importjsonimportreimportrequestsfromparselimportSelectordefget_calendar(year_and_month):"""数据来源:https://wannianrili.bmcx.com/@return:{"2024-04-01":{"class_name":"","comment":"愚人节"}}"""#https://wannianrili.bmcx.com/ajax/?q=2024-04&v=22121303url='https://wannianrili.bmcx.com/ajax/'params={'q':year_and_month,'v':'22121303'}headers={"User-Agent":"Mozilla/5.0(WindowsNT6.1;WOW64;rv:64.0)Gecko/20100101Firefox/64.0"}res=requests.get(url,params=params,headers=headers)sel=Selector(text=res.text)rows=sel.css('.wnrl_riqi')data={}forrowinrows:class_name=row.css('a::attr(class)').extract_first('').strip()day=row.css('a::attr(onclick)').extract_first('').strip()comment=row.css('.wnrl_td_bzl::text').extract_first('').strip()ret=re.search('\d{4}-\d{2}-\d{2}',day)day=ret.group(0)data[day]={'class_name':class_name,'comment':comment}returndatadefget_day_item(day):"""@paramdayreturn:{"class_name":"","comment":"愚人节"}"""#2024-05-04=>2024-05calendar=get_calendar('-'.join(day.split('-')[:2]))#print(json.dumps(calendar,indent=2,ensure_ascii=False))returncalendar.get(day)defis_workday(day):#工作日workday_class_list=['','wnrl_riqi_ban']day_item=get_day_item(day)ifday_item:ifday_item.get('class_name')inworkday_class_list:returnTrueelse:returnFalsedefis_holiday(day):#节假日holiday_class_list=['wnrl_riqi_xiu','wnrl_riqi_mo']day_item=get_day_item(day)ifday_item:ifday_item.get('class_name')inholiday_class_list:returnTrueelse:returnFalseif__name__=='__main__':print(is_holiday('2024-05-04'))#True123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104使用china-calendar基于以上代码,作者封装了一个库,可以直接使用文档:https://github.com/mouday/china-calendarhttps://pypi.org/project/china-calendar/安装pipinstallchina-calendar1使用示例:importchina_calendar#清明节assertchina_calendar.is_holiday('2024-04-04')==Trueassertchina_calendar.is_workday('2024-04-04')==False123456
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-7 07:12 , Processed in 0.542819 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表