空き室状況をCSVに変換

シクロの家の空き室状況がわかりにくかったのでCSVに変換

import calendar
import datetime
import re

import pandas as pd
import requests
from bs4 import BeautifulSoup

# スクレイピング
def scraping():

    url = "http://www.cyclonoie.com/availability.php"

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

    result = []

    for i in soup.find("div", class_="alpha-web", style="text-align: center;").select(
        "p.alpha-web-text01"
    ):

        text = i.get_text(strip=True)
        pattern = r"\d{1,2}月\d{1,2}日"

        matchOB = re.match(pattern, text)

        if matchOB:
            t = [j.strip() for j in re.split("(ミックスドミトリー|女性ドミトリー|2人用個室|4人用個室)", text)]
            result.append(t)

        return result


# 月日から年月日に変換(うるう年用)
def dt_conv(s):

    today = datetime.date.today()

    try:

        dt = datetime.datetime.strptime(s, "%m月%d日")
        dt = dt.replace(year=today.year).date()

    except:

        year = today.year

        while not calendar.isleap(year):

            year += 1

        m = re.match(r"(\d{1,2})月(\d{1,2})日", s)

        month, day = map(int, m.groups())

        dt = datetime.date(year, month, day)

    return dt


if __name__ == "__main__":

    # スクレイピング
    result = scraping()

    # DataFrameに変換
    df = pd.DataFrame(result)

    # 日付とイベント分離
    df1 = df[0].str.extract(r"(\d{1,2}月\d{1,2}日)(.)(イベントのため(休館|貸切))?")
    df1.rename(columns={0: "日付", 1: "イベント", 2: "状況"}, inplace=True)

    # 結合
    df2 = pd.concat([df, df1], axis=1)

    # 部屋名除去
    df3 = df2.drop(df2.columns[[0, 1, 3, 5, 7, 10]], axis=1)

    # 月日から年月日に変換
    df3["日付"] = df3["日付"].apply(dt_conv)

    # 日付をインデックスに設定
    df3.set_index("日付", inplace=True)

    # 列名変更
    df3.rename(
        columns={2: "ミックスドミトリー", 4: "女性ドミトリー", 6: "2人用個室", 8: "4人用個室"}, inplace=True
    )

    # 残り数を数字のみに変更
    df3.replace(r"\s", "", regex=True, inplace=True)
    df3.replace("○Last", "", regex=True, inplace=True)

    # CSVに書き出し
    df3.to_csv("result.csv", encoding="utf_8_sig")