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
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
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)