こちらの方がよさそう
!pip install jaconv
import requests from bs4 import BeautifulSoup import jaconv import datetime def daterange(_start, _end): for n in range((_end - _start).days): yield _start + datetime.timedelta(n) url = "https://www.pref.mie.lg.jp/YAKUMUS/HP/m0068000071_00005.htm" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko", } r = requests.get(url, headers=headers) r.raise_for_status() soup = BeautifulSoup(r.content, "html5lib") JST = datetime.timezone(datetime.timedelta(hours=+9), 'JST') # スクレイピング table = [] for tr in soup.find("table").find_all("tr"): # 1列目に月を含む行のみ抽出 if "月" in tr.td.text: # 日、件を除去し半角数字に変換 tds = [ jaconv.z2h(td.get_text(strip=True).rstrip("日件"), digit=True) for td in tr.find_all("td") ] # 月で分割し、月・日を数字に変換 m, d = [int(td.strip()) for td in tds[0].split("月")] # 月・日からdatetimeを作成 dt = datetime.datetime(2020, m, d, 18, 0).astimezone(JST) tmp = list(map(int, tds[1:])) table.append([dt] + tmp) table # 日付データ初期化 result = {} for i in daterange(table[0][0], table[-1][0]): result[i.isoformat(timespec="milliseconds")] = [0, 0, 0] result # 日付をKeyに上書き for k, *v in table: result[k.isoformat(timespec="milliseconds")] = v result # ソート、辞書リストに変換 data = [{"日付": k, "小計": v[0]} for k, v in sorted(result.items(), key=lambda x: x[0])] data
※日付データ初期化は最終日の前日までになっていますがそのあとの上書きで最終日は追記されるため+1日は省略しています