【ラクラク資産管理】Pythonのスクレイピングで資産情報を一括取得!!

最近、プログラミングを勉強し始めました。

とりあえず巷で流行りのPythonの基礎学習が一通り終わったのでステップアップになにか作ってみようと思います。

何を作ろうか迷ったのですが、難しいものは作れないのでまずはスクレイピングを使って銀行の残高と証券口座の時価を取得してみます。

Pythonにはスクレイピングやブラウザの自動操作に便利なseleniumというモジュールがあるので、こちらを使用していきます。

この記事では、住信SBIネット銀行の銀行残高を取得してみたいと思います。

実際の処理

大まかな流れ
  1. 必要なモジュール(機能)をインストールする
  2. webdriver.Chrome()でChromeを開く
  3. .get()で指定したURLへ移動する
  4. find_element_〇〇()、.send_keys()、.click()、.text()を使ってログインし、必要な情報を取得する。

seleniumuを使う前段階としてローカルにseleniumとChromeドライバーをインストールします。

pip install selenium
brew install chromdriver

この操作は一度行えば、今後はしなくて大丈夫です。

次にSeleniumを使うためにファイル内にSeleniumをインポートします。

improtには3種類やり方があるのですが、興味のある方はこちらの記事を参考にしてみてください。

今回のスクレイピングではSeleniumの中のwebdriverしか使わないので、webdriverのみをインポートします。

ついでに、timeのsleepもインポートしておきます。sleepの機能については後で使うときに紹介します。

from selenium import webdriver
from time import sleep

では、さっそくブラウザを開いてみましょう。

driverという名前で、Chromeのwebdriberを起動させます。

driver = webdriber.Chrome()

写真のような画面が出てくれば成功です。

ページ推移したときに、取得したい情報が表示されるまで10秒待つ。という設定を加えます。

暗黙的待機といいます。詳しくはこちらの記事を参考にしてみてください。

driver.implicitly_wait(10)

では、driverをつかってページを移動してみましょう。

まずは住信SBIネット銀行のログインページのURLへ移動します。

url = '住信SBIネット銀行のログインページのURL'
driver = get(url)

ログインページに推移したら、ファンクションキーの12を押して、写真右側の画面を出します。

①のボタンを押したあとに取得したい場所をクリック(今回なら②)すると、右側で青くハイライトされます。

この情報をもとに、ブラウザを操作していきます。

情報を取得するには、find_element_by_○○を使います。

主に使うfind_element_by_〇〇
  • find_element_by_id:idをつかって情報を探す
  • find_element_by_name:nameを使って情報を探す
  • find_element_by_Xpath:xpathを使って情報を探す。

ユーザーネームに情報を入れます。

まずidをもとにfind_element_by_idをつかってユーザーネームを入力する場所を指定します。
つぎにclearを使ってすでに入っている値がある場合は削除します。
さいごにsend_keysをつかって値を入力します。

同じことをログインパスワードにも行います。

#ユーザーネーム
driver_name = driver.find_element_by_name('userName')
driver_neme.clear()
driver_name.send_keys('*********')

#ログインパスワード
driver_password = driver.find_element_by_id('loginPwdSet')
driver_password.clear()
driver_password.send_keys('***************')

ユーザーネームとログインパスワードが入力できたら、ログインボタンをクリックさせます。

先ほどと同じようにクリックしたいボタンを指定したいのですが、今回はidやnameが設定されていないので、xpathを使って指定します。

xpathは右画面の青くなっているところを右クリック→copy→copy Xpathで取得できます。

xpathが取得できたらfind_element_by_xpathで指定し、clickでクリックしてもらいます。

driver_loginbtn = driver.find_element_by_xpath('xpathをコピペしたもの')
driver_loginbtn.click()

これで住信SBIネット銀行へログインできました。

では銀行残高を取得してみましょう。こちらもidやnameは設定されていなかったので、xpathで指定します。

この情報はこのままでは下記のようなよくわからないものが返ってくるので、.textとしてあげることで、残高を文字で返してくれます。

driver.find_element_by_xpath('xpathをコピペしたもの').text
    *****(残高)

これで情報は取得できるのですが、住信SBIネット銀行の場合は、ログインボタンを押してから残高の情報が出るまでに少し時間がかかるようで、残高取得をするタイミングでエラーが頻発しました。

ここでsleepを使って、2秒ってから処理を実行するようにしたいと思います。

#ログインしたあと

sleep(2)
sbi_bank = driver.find_element_by_xpath('/html/body/app/div[1]/ng-component/div/main/ng-component/nb-titlecarousel/div/div/div/div/ul/div/div/li[2]/div/div/strong').text

これで問題なく情報を取得できたと思います。さいごにブラウザを閉じて終わりにします。

driver.quit()

今までのコードをまとめておきます。

from selenium import webdriver
from time import sleep

driver = webdriver.Chrome()

url = '住信SBIネット銀行のログインページのURL'
driver.get(url)

driver_login = driver.find_element_by_name('userName')
driver_login.clear()
driver_login.send_keys('**********')

driver_password = driver.find_element_by_id('loginPwdSet')
driver_password.clear()
driver_password.send_keys('***********')

driver_loginbtn = driver.find_element_by_xpath('xpathをコピペしたもの')
driver_loginbtn.click()

sleep(2)

sbi_bank = driver.find_element_by_xpath('xpathをコピペしたもの').text
sbi_bank

まとめ

seleniumを使って住信SBIネット銀行の口座残高を取得しました。

今回の操作ができれば、ほとんどのサイトで任意の情報を取得できるようになると思います。

同じようなことをSBI証券や楽天銀行、楽天証券、ゆうちょ銀行などでも行って、月初めにまとめて取得できるようにすれば、資産管理がぐっと楽になりそうです。

同じようなことがマネーフォワードでもできますが、プログラミングの勉強も兼ねてやってみました。

Python勉強したけど何作ったらいいかわからないと困っている方は、普段使っているアプリの機能の一部を自分で作ってみるというのが個人的にはおすすめです。

Twitterでフォローしよう

おすすめの記事