当サイトには広告・プロモーションが含まれています。

マネーフォワードのPythonスクレイピング(1)

この記事でわかること

  • マネーフォワードの資産データを、pythonのseleniumライブラリで収集します。
  • 私はプログラマではないので、動けば良いという考えです!
目次

Pythonコード | seleniumを利用

’23 4/1追記
二段階認証のボタンのXpathが変わっていました。修正しました。

またget_valuesの関数を使った評価額の取得が出来なくなっていました。
この点を修正し、コード全体の仕様を変更しました(アセットリストの使用を止め、単に表から数値を抽出することにします。)

コード全体1:スクレイピング

このコードによって、マネーフォワードの資産ページまで移動できます。

from selenium import webdriver
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager #追加
from time import sleep
import re
import subprocess
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = "Meiryo" #日本語

EMAIL = ""#認証のメールアドレス
PASSWORD = ""#認証のパスワード
TWO_STEP_AUTHENTICATION_SETTING_CODE = ""#二段階認証のコード

#---実行---
#クロームブラウザを立ち上げ	
browser = webdriver.Chrome(ChromeDriverManager().install())
browser.get("https://id.moneyforward.com/sign_in/email")

# マネーフォワードwebpage操作1
# 認証
ele_name = browser.find_element(By.XPATH,
    '/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/input')
ele_name.send_keys(EMAIL)
sleep(3)

ele_login = browser.find_element(By.XPATH, 
     '/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[3]/input')
ele_login.click()
sleep(3)

elem_password = browser.find_element(By.XPATH,
    '/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/input[2]')
elem_password.send_keys(PASSWORD)
sleep(3)

elem_login2 = browser.find_element(By.XPATH,
    ' /html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[3]/input')
elem_login2.click()
sleep(3)

# マネーフォワードwebpage操作2
#二段階認証
two_step_authentication = ['oathtool', '--totp',
                           '--base32', TWO_STEP_AUTHENTICATION_SETTING_CODE]
auth_code = re.findall(
    r'\d+', subprocess.check_output(two_step_authentication).decode('utf-8'))

elem_auth_number = browser.find_element_by_xpath(
    '/html/body/main/div/div/div/section/div[1]/section/form/div[2]/div/div[1]/input')
elem_auth_number.send_keys(auth_code[0])
sleep(3)

elem_auth = browser.find_element_by_xpath(
    '/html/body/main/div/div/div/section/div[1]/section/form/div[2]/div/div[2]/button')
elem_auth.click()
sleep(3)

# マネーフォワードwebpage操作3
# アカウント選択ページ
elem_money_forward = browser.find_element_by_xpath(
    '/html/body/main/div/div/div/div[1]/div/ul/li/a')
elem_money_forward.click()
sleep(3)

# トップページ
elem_choose_account = browser.find_element_by_xpath(
    '/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[2]/input')
elem_choose_account.click()
sleep(3)

# 資産ページ
elem_portfolio = browser.find_element_by_xpath(
    '/html/body/div[1]/div[1]/div[1]/header/div[2]/ul/li[4]/a')
elem_portfolio.click()
sleep(3)

コード2:webページの表から数値の抽出

このコードによって、資産ページから数値を抽出できます。

#預金・現金・暗号資産
table_mf = browser.find_element(By.CLASS_NAME, "bs-detail") 
trs = table_mf.find_elements(By.TAG_NAME,"tr")

for i in range(1,len(trs)):     
    list = [x.text for x in  trs[i].find_elements(By.TAG_NAME,"td")[:]]
    print(list)

#資産の内訳
table_mf = browser.find_element(By.CLASS_NAME, "bs-total-assets")  
trs = table_mf.find_elements(By.TAG_NAME,"tr")

for i in range(len(trs)): 
    list = [x.text for x in  trs[i].find_elements(By.TAG_NAME,"td")[:]]
    print(list)

#投資信託
table_mf = browser.find_element(By.CLASS_NAME, "margin-top") 
trs = table_mf.find_elements(By.TAG_NAME,"tr")

for i in range(1, len(trs)):
    list = [x.text for x in  trs[i].find_elements(By.TAG_NAME,"td")[:]]
    print(list)

解説

ライブラリ(selenium, webdriver_manager)

seleniumとwebdriver_managerが必要ですので、適宜ダウンロードして下さい。
conda install -c conda-forge selenium

conda install -c conda-forge webdriver-manager

二段階認証

二段階認証をMoneyFoward ME 側で設定して下さい。こちらのページが参考になります。
下記にログインに必要な情報を入れて下さい。

EMAIL = ""#認証のメールアドレス
PASSWORD = ""#認証のパスワード
TWO_STEP_AUTHENTICATION_SETTING_CODE = ""#二段階認証のコード

Xpathの調べ方 ’22 8/22追記

スクレイピングに際し、もしパスが変わってしまって困っている方いれば、下記の方法で調べられますよ。

STEP
右クリックで「検証」
STEP
開いた画面の左上に四角矢印アイコンをクリック
STEP
操作したいwebページのエレメントをクリック。するとコードの該当箇所がハイライトされる。
STEP
ハイライト箇所で左クリック、メニューのcopy / copy xpathでパスが取得できます。
STEP
パスを修正する。

ele_login = browser.find_element(By.XPATH,
/html/body/main/div/div/div/div/div[1]/section/form/div[2]/div/div[4]/input‘)

まとめ | マネーフォワードのpythonスクレイピング

Python(seleniumライブラリ)を用いてマネーフォワードに自動ログインし、予め用意したアセットタイプを基に資産リストをデータフレームで作成しました。

一応旧バージョンの文章を残しておきます。

アセットリストの準備

名前からどういう資産なのかを判断するために、リストを作っておきます。

“asset_type_list.csv”という名前でアセットリストを作成して、pythonコードと同じフォルダに置いています。

#アセットタイプリストをロード
asset_type_list = pd.read_csv("asset_type_list.csv")

asset_type_list.csvには「マネーフォワード上で表示される名称」と「アセットタイプ」を示したものを準備します。一字異なるとダメなので、コピペがよいです。

証券会社によって同じ商品でも表示が異なるので、実際に表示されるものを書いて下さい!
私が作った例を下に載せます。

name,asset_type
三菱UFJ国際-eMAXIS Slim 全世界株式(オール・カントリー),stock
SBI-SBI・全世界株式インデックス・ファンド,stock
SBI-SBI・V・全米株式インデックス・ファンド,stock

(Pythonのノートブックを使っている場合ですが、)asset_type_listは下のように表示されればOKです。

asset_type_list

資産一覧 (名称、評価額、損益額、アセットタイプ)

マネーフォワードから抽出した資産リスト(変数名df)は、名称、評価額、損益額、アセットタイプが表示されればOKです。asset_type_listに記載したようにasset_typeが表示されることを確認して下さい。他の項目は下記の通りです。

  • value_vl ・・・評価額
  • value_pl・・・損益額
資産リストのdataframe
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

CAPTCHA


目次