スクレイピングでカレンダーをポチポチしたいとき。
自分はxpathを使います。
その時よくあるxpathのパターンが以下(日曜始まりのカレンダー)
//[@id="cal"]/main/table/tbody/tr[3]/td[1]・・・第3週目の1日目
//[@id="cal"]/main/table/tbody/tr[3]/td[2]・・・第3週目の2日目
//*[@id="cal]/main//table/tbody/tr[3]/td[7]・・・第3週目の7日目
カレンダーがきれいなテーブルになっています。
tr[3]がカレンダーの第3週目を表しています
もし、2021年2月28日をポチっとしたい場合(日曜始まりの場合)
xpathは
//*[@id="cal"]/main/table/tbody/tr[5]/td[1]・・・第5週目の1日目
ここで必要になるのがtr[5]の部分つまり、
任意の日付がその月のカレンダーの第〇週になるということです。
ネットで調べても難しかったので自分で関数を作成しました。
import datetime
def get_week(year,month,day):
"""
日曜始まりのカレンダーの場合任意の日付が第〇週かを求める
Args:
year:年
month:月
day:日
Returns
第〇週
"""
firstday=datetime.date(year,month,1) #任意の日付の同月1日のdate型を作成する
hizuke=datetime.date(year,month,day) #任意の日付のdate型を作成する
firstsyuu=firstday.strftime("%U") #任意の日付同月1日がその年の何週目かを取得する
nowsyuu=hizuke.strftime("%U") #任意の日付がその年の第何週目かを取得する
return int(nowsyuu)-int(firstsyuu)+1 #引き算して求める
strftime("%U")で年初からの週数がわかるのでうまく引き算をして求めます。
※1/1は第0週
※カレンダーが月曜日から始まる場合strftime("%W")