献血バス運行スケジュールをスクレイピング

import pandas as pd
import requests
from bs4 import BeautifulSoup

url = "https://www.bs.jrc.or.jp/csk/ehime/place/m1_03_index.html"

r = requests.get(url)
r.raise_for_status()

soup = BeautifulSoup(r.content, "html.parser")

dfs = []

for i in soup.select("div.mod-table-scrollWrap"):

    df_tmp = pd.read_html(i.find("table").prettify())[0]
    df_tmp["日付"] = i.find_previous_sibling("p").get_text(strip=True)

    dfs.append(df_tmp)

df0 = pd.concat(dfs).reset_index(drop=True)

df0["記念品"] = df0["献血会場"].str.contains("※ご協力団体様から記念品進呈いたします")

# 不要文字削除
df0["献血会場"] = (
    df0["献血会場"]
    .str.replace("(\[MAP\]|⌚Web予約可|(前日17時まで)|※ご協力団体様から記念品進呈いたします)", "", regex=True)
    .str.split()
)

df0["住所"] = df0["献血会場"].str[-1]
df0["献血会場"] = df0["献血会場"].str[:-1].str.join(" ")

df0[["場所", "受付"]] = df0["献血会場"].str.split("受付場所:", expand=True)

df0["場所"] = df0["場所"].str.strip()
df0["受付"] = df0["受付"].str.strip()

df0["受付時間"] = df0["受付時間"].str.replace("(昼中断なし)", "").str.normalize("NFKC").str.split()
df0["時間"] = df0["受付時間"].str.join("/")

df0

# 今日
dt_now = pd.Timestamp.now(tz="Asia/Tokyo").tz_localize(None).date()
dt_now

# 3日後
dt_3dy = dt_now + pd.Timedelta(days=3)

df0["year"] = dt_now.year
df0[["month", "day"]] = df0["日付"].str.extract("(\d{1,2})月 ?(\d{1,2})日").astype(int)

df0["date"] = pd.to_datetime(df0[["year", "month", "day"]]).dt.date

# df0[["hour", "minute"]] = df0["受付時間"].str[0].str.split("-").str[0].str.split(":", expand=True).astype(int)
# df0["datetime"] = pd.to_datetime(df0[["year", "month", "day", "hour", "minute"]])

df1 = df0[df0["date"] == dt_3dy].copy()
df1

for _, row in df1.iterrows():

    text = f'【日時】\n{row["日付"]} {row["時間"]}\n\n【献血会場】\n{row["場所"]}({row["住所"]})'

    if row["受付"]:
        text += f'\n\n【受付場所】\n{row["受付"]}'

    if row["記念品"]:
        text += f"\n\n※ご協力団体様から記念品進呈"

    text += f'\n\n#献血 #愛媛県 #{row["市区町村"]} '

    print(text)
    print("-" * 20)