Python獲取中國(guó)日歷2022版

近期又遇到了要做排班的事情,需要標(biāo)記哪些日期是法定節(jié)假日屁置,本來(lái)想著把以前的記錄拿來(lái)抄作業(yè)仁连,怎奈到了2022年已然不是那個(gè)2020年的它了阱穗。

接下來(lái),放上2022年版本的日歷獲取方法昌抠。
今年的接口已經(jīng)變成了:https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?tn=wisetpl&format=json&resource_id=39043&query=2022%E5%B9%B41%E6%9C%88&t=1642579711570&cb=op_aladdin_callback1642579711570

然后獲取的結(jié)果也只有上月鲁僚、當(dāng)月、下月冰沙,且對(duì)節(jié)假日的標(biāo)記字段(status)有的月份沒(méi)有拓挥,所以處理方式有所變化,最終標(biāo)記的是否節(jié)假日僅做了較少的抽樣驗(yàn)證侥啤,嚴(yán)格來(lái)說(shuō)需要使用者自己再進(jìn)行驗(yàn)證后使用。
以下是全部代碼:


# -*- coding: utf-8 -*-
"""
Created on Wed Jan 19 16:10:13 2022

@author: shanlin
"""

import pandas as pd
import requests
import json
import numpy as np
import re

# 生成某一年的日歷
def gen_calendar2022(year=2022):
    df=pd.DataFrame()
    # 獲取法定節(jié)假日
    up1='https://sp1.baidu.com/8aQDcjqpAAV3otqbppnN2DJv/api.php?tn=wisetpl&format=json&resource_id=39043&query='
    up2='月&t=1642579711570&cb=op_aladdin_callback1642579711570'
    # 2022年接口已經(jīng)改為按月獲取數(shù)據(jù)蚁鳖,因此循環(huán)12個(gè)月獲取每月數(shù)據(jù)
    for i in range(1,13):
        url="".join([up1,str(year),"年",str(i),up2])
        print(url)
        r=requests.get(url)
        rtxt=re.split("[()]", r.text)[1]
        r_json=json.loads(rtxt)
        each_d1=pd.DataFrame(r_json['data'])
        each_d2=pd.DataFrame(each_d1['almanac'][0])
        ## 篩選當(dāng)月數(shù)據(jù)赁炎,數(shù)據(jù)中year\month\day是公立日期,數(shù)據(jù)會(huì)返回3個(gè)月的數(shù)據(jù)
        each_d3=each_d2[each_d2['month']==str(i)]
        # ## 由于12月的數(shù)據(jù)沒(méi)有status字段(可能是下一年一月放假規(guī)定沒(méi)出來(lái)琅攘,所以這里進(jìn)行特殊處理)--結(jié)論應(yīng)該是某些月份沒(méi)有節(jié)假日就沒(méi)有status字段,所以后面專(zhuān)門(mén)針對(duì)status進(jìn)行處理
        # if i==11:
        #     each_d3=each_d2[each_d2['month']>=str(i)]
        # else:
        #     each_d3=each_d2[each_d2['month']==str(i)]
        ## 組合真的日期哨查,并標(biāo)記節(jié)假日情況
        each_d3['公歷日期']=pd.to_datetime(each_d3['year']+"/"+each_d3['month']+"/"+each_d3['day'])
        each_d3['周幾']=each_d3['公歷日期'].dt.dayofweek+1
        ## 標(biāo)記是否節(jié)假日(即當(dāng)天是否是法定放假)剧辐,其中status中的1表示放假,2表示上班溉奕,注意需要處理有沒(méi)有status列的情況
        ## 有status的情況
        if "status" in each_d3.columns:
            each_d3['status'].fillna(0,inplace=True)
            each_d3['status']=each_d3['status'].astype('int',errors='ignore')
            ## 按周幾把周末標(biāo)記成1忍啤,周一至周五標(biāo)記成0,然后通過(guò)標(biāo)記和status的值相加同波,結(jié)果為1和2的就是假期
            judge=np.where(each_d3['周幾']<6,0,1)+each_d3['status']
            each_d3['是否節(jié)假日']=np.where((judge==1) | (judge==2),"Y","N")
            df=df.append(each_d3)
            # each_d3.to_csv("百度日歷.csv",index=False)
        ## 沒(méi)有status的情況未檩,直接按周末為節(jié)假日
        else:
            each_d3['是否節(jié)假日']=np.where(each_d3['周幾']>=6,"Y","N")
            df=df.append(each_d3)
    # 重命名列
    df.rename(columns={'animal':'生肖','avoid':'忌','cnDay':'中文星期','day':'日','gzDate':'干支日','gzMonth':'干支月','gzYear':'干支年','isBigMonth':'是否為陰歷大月','lDate':'中文陰歷日','lMonth':'中文陰歷月','lunarDate':'數(shù)字陰歷日','lunarMonth':'數(shù)字陰歷月','lunarYear':'數(shù)字陰歷年','month':'月','oDate':'陽(yáng)歷當(dāng)天0點(diǎn)','suit':'宜','term':'節(jié)氣節(jié)日','type':'各種與節(jié)日有關(guān)的類(lèi)型','value':'各種日','year':'年','desc':'一種節(jié)日','status':'1休假2上班'},
              inplace=True)
    return df


if __name__=="__main__":
    df=pd.DataFrame()
    for year in range(2010,2023):
    # 注意2010年的元旦當(dāng)天并未被百度標(biāo)記為假日,所以當(dāng)年的數(shù)據(jù)可能是錯(cuò)誤的
    # year=2022
        each_df=gen_calendar2022(year)
        df=df.append(each_df)
    df.to_csv('{}年節(jié)日歷表.csv'.format(year),index=False)

以下還是懶人入口孙蒙,放了2010-2022年的數(shù)據(jù)(不過(guò)2010年元旦百度并未標(biāo)記為假日悲雳,所以這一年的是否節(jié)假日數(shù)據(jù)可能是錯(cuò)的):

地址: 
https://pan.baidu.com/s/1lKTlbFGSCQYt5FczXRgI8A?pwd=h44c 
提取碼: h44c 
日歷表內(nèi)容
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末怜奖,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子歪玲,更是在濱河造成了極大的恐慌滥崩,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蜂科,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡导匣,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)赋访,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)缓待,“玉大人,你說(shuō)我怎么就攤上這事步悠√闭颍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵接奈,是天一觀的道長(zhǎng)通孽。 經(jīng)常有香客問(wèn)我睁壁,道長(zhǎng),這世上最難降的妖魔是什么潘明? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任钳降,我火速辦了婚禮,結(jié)果婚禮上遂填,老公的妹妹穿的比我還像新娘。我一直安慰自己撵幽,他們只是感情好礁击,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布逗载。 她就那樣靜靜地躺著链烈,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捏膨。 梳的紋絲不亂的頭發(fā)上食侮,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音链快,去河邊找鬼眉尸。 笑死,一個(gè)胖子當(dāng)著我的面吹牛噪猾,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丝蹭,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼坪蚁,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了贱田?” 一聲冷哼從身側(cè)響起嘴脾,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎耗拓,沒(méi)想到半個(gè)月后扶平,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡哥谷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了猜扮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片监婶。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖煮盼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情僵控,我是刑警寧澤鱼冀,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站充易,受9級(jí)特大地震影響荸型,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜帆疟,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一踪宠、第九天 我趴在偏房一處隱蔽的房頂上張望妈嘹。 院中可真熱鬧,春花似錦润脸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)垦巴。三九已至骤宣,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間等限,已是汗流浹背望门。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工锰霜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人锈遥。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像所灸,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钾唬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容