1 导库

import chinese_calendar
import datetime
import pandas as pd 

2 指定时间范围

start_time = datetime.date(2021, 1, 1)  # 指定开始时间
end_time = datetime.date(2022, 6, 30)   # 指定结束时间

3 生成工作日

workdays = pd.DataFrame(chinese_calendar.get_workdays(start_time,end_time))
workdays = workdays.rename(columns={0:'日期'})
workdays['属性'] = '工作日'
workdays
日期属性
02021-01-04工作日
12021-01-05工作日
22021-01-06工作日
32021-01-07工作日
42021-01-08工作日
.........
3672022-06-24工作日
3682022-06-27工作日
3692022-06-28工作日
3702022-06-29工作日
3712022-06-30工作日

372 rows × 2 columns

4 生成假期日

hd = pd.DataFrame(chinese_calendar.get_holidays(start_time,end_time))
hd = hd.rename(columns={0:'日期'})
hd['属性'] = '假期'
hd
日期属性
02021-01-01假期
12021-01-02假期
22021-01-03假期
32021-01-09假期
42021-01-10假期
.........
1692022-06-12假期
1702022-06-18假期
1712022-06-19假期
1722022-06-25假期
1732022-06-26假期

174 rows × 2 columns

 

5 获取国家法定节假日

import requests
from bs4 import BeautifulSoup as BS

# 获取指定月份节假日
def get_holidays(year, month):
    
    result = {}
    
    url = f"https://www.rili.com.cn/wannianli/{year}/{month}/"
    content = requests.get(url)
    bs = BS(content.text)

    holidays = ['春节','元旦','除夕','元宵节','清明节','劳动节','端午节','中秋节','国庆节']

    tds = bs.find("table").find("table").find_all("td")
    
    
    for td in tds:
        if 'noby' in td['class']:
            continue
            
        day = td.select(".riwai>.ri")[0].text
        name1 = td.select(".riwai>.jie")
        name2 = td.select(".riwai>.r2")
        if len(name1)>0:
            name = name1[0].text
        if len(name2)>0:
            name = name2[0].text

        if name in holidays:
            result[f"{year}-{month}-{day}"] = name
            
    return result


if __name__=="__main__":
    holidays = {}
    
    for year in range(2022, 2023):
        for month in range(1, 13):
            holidays.update(get_holidays(year,month))
            
    print(holidays)
    holidays = pd.DataFrame([holidays]).T.reset_index()
    print(display(holidays.rename(columns={'index':'日期',0:'国家法定节假日'})))
{'2022-1-1': '元旦', '2022-1-31': '除夕', '2022-2-1': '春节', '2022-2-15': '元宵节', '2022-4-5': '清明节', '2022-5-1': '劳动节', '2022-6-3': '端午节', '2022-9-10': '中秋节', '2022-10-1': '国庆节'}
日期国家法定节假日
02022-1-1元旦
12022-1-31除夕
22022-2-1春节
32022-2-15元宵节
42022-4-5清明节
52022-5-1劳动节
62022-6-3端午节
72022-9-10中秋节
82022-10-1国庆节
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐