三重県の新型コロナウイルス感染症検査実施件数をスクレイピング

こちらの方がよさそう

imabari.hateblo.jp

qiita.com

!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日は省略しています