S0-ma's Blog

s0-maのブログです。

PythonでくらしTEPCOをスクレイピングしてみた

Abstract

PythonからくらしTEPCO|東京電力のご家庭向け無料Webサービスにログインして、ページ内のユーザー情報を取得してみた。

Introduction

最近、自宅の電力計がスマートメーター化された。で調べてみると、使用電力の30分値が計測されていてデータも取得できるらしい。 www.tepco.co.jp どうせならデータをすべて手元に置いて、分析(の真似事)をしてみたい。 まずはPython経由でくらしTEPCOにログインし、ログイン後に表示されるページのデータを取得する方法を調べてみた。

Setup and Results

前準備

  • htmlを解析するため、Beautifulsoupというライブラリをインストール。
pip install beautifulsoup4
  • くらしTepcoのアカウントを作成しておく。

  • ログイン情報は設定ファイルから読み込む方式とした。 (本当は環境変数にしたほうが良いのでしょうが。) .passwordという名前で、くらしTEPCOにログインするためのIDとPasswordを書いた以下の設定ファイルを用意しておく。

[settings]
username = my_username
password = my_password

どこにアクセスすればログインできるのか?

https://www.kurashi.tepco.co.jp/のログインフォームを見てみるとこんな感じ。

f:id:s0-ma:20190211004345j:plain
くらしTEPCO ログインフォーム

要は、https://www.kurashi.tepco.co.jp/kpf-login に対して、

  • ACCOUNTUID:
  • PASSPWORD:
  • HIDE_URL: /pf/ja/pc/mypage/home/index.page?
  • LOGIN': EUAS_LOGIN

をPOSTしてやれば良いみたい。

コード

import configparser
import requests
from bs4 import BeautifulSoup

#IDとパスワードをファイルから読み込み
config = configparser.ConfigParser()
config.read('.password', 'UTF-8') 
username = config.get("settings", 'username')
password = config.get("settings", 'password')

# くらしtepcoにログイン
session = requests.Session()
param = {
        'ACCOUNTUID': username,
        'PASSWORD': password,
        'HIDEURL': '/pf/ja/pc/mypage/home/index.page?',
        'LOGIN': 'EUAS_LOGIN',
        }

login = session.post(
        'https://www.kurashi.tepco.co.jp/kpf-login', data=param)
login.encoding = login.apparent_encoding

#ログインページのhtmlから、フッタに書いてあるユーザー情報を取り出してみる
html = BeautifulSoup(login.text, "html.parser")
for element in html.find("footer").find_all("input"):
    print(element["name"], element["value"])

実行結果

契約者名とか契約者住所が取得できた。

Conclusion

これでログインが必要なWebサイトであっても、ログイン後の情報がPython経由で取得することができた。 実際のブラウザ上でどのようなアクセスをしているかを一つ一つ確認して、それをプログラム上で再現していく方法が一番早かった。 次は、使用電力量を取得するところまで試してみたい。

Reference

github.com

www.kurashi.tepco.co.jp

www.crummy.com