中部電力の「検針日程」をスクレイピング

投稿者: | 2022-04-09
  • Seleniumを利用
from selenium import webdriver
import time
import re
import csv
import pandas as pd

# Chromeドライバに環境変数が通っていない場合は引数で指定
driver_path = "/Users/mbp441/Desktop/github/PYTHON/chromedriver"
driver = webdriver.Chrome(driver_path)

# urlを開く
driver.get("https://miraiz.chuden.co.jp/home/electric/contract/payment/calendar/index.html")

# 中部電力の基本検針日が記載された箇所のidセレクタ
nittei_id = ['n01', 'n02', 'n04', 'n05', 'n06', 'n08', 'n09', 'n10', 'n11', 'n12', 'n13', 'n15', 'n16', 'n17', 'n18', 'n19']

# 実検針日(ex.「4月1日」)の数値を取り出す正規表現パターン
p = re.compile('\d+')

csv_all = []

# 開始年度を取得
start_year = driver.find_element_by_css_selector("div #n01 ~div th").text.replace('年', '')
next_year = '{}'.format(int(start_year) + 1)

for nittei in nittei_id:

  # 基本検針日(=日程)
  kihon_kenshinbi = int(nittei[1:3])
  print(f"読込み中...検針日程:{kihon_kenshinbi}")
	
  # 日程idに属する実検針日(4月1日等)の一覧を取り出す
  jitsu_kenshinbi_list = driver.find_elements_by_css_selector(f"div #{nittei} ~div:nth-of-type(1)  td")

  for td_date in jitsu_kenshinbi_list:

    jitsu_kenshinbi = td_date.text
    # 正規表現で実検針日の月と日の数値を取得
    month, day = p.findall(jitsu_kenshinbi)

    csv_row = []
    csv_row.append(kihon_kenshinbi)

    # 実検針日「yyyy/m/d」を作成
    if int(month) >= 4:
      csv_row.append(start_year + '/' + month + '/' +  day)
    else:
      csv_row.append(next_year + '/' + month + '/' +  day)

    csv_all.append(csv_row)

driver.quit()

df = pd.DataFrame(csv_all, columns=['基本検針日', '実検針日'])

print(df)