はじめに
前回、ログインまでやりました。
①「Python・Selenium」を使用してMoneyFoward MEにログインする
②保有している資産をスクレイピングして、それぞれの保有資産を自分の欲しい分類にて集計 (今回)
③EXCELファイルにてダウンロードする (今回)
例として、「投資信託」について、投資先(全世界・先進国・S&P500・国内など)による区分ごとにダウンロードすることをやってみます。
データ取得
保有している「資産名称」・「評価額」・「評価損益」をスクレイピング。
同時に、「元本」を計算する。それぞれの保有資産を、あらかじめ作成しておいた分類ファイル(ローカル)を読み取って、自分の好きな資産分類に集計できるようにしておく。
mf_get.py
def get_asset_class(name):
asset_class = ''
for i in range(len(inv_trust_list.index)):
if name == inv_trust_list['name'][i]:
asset_class = inv_trust_list['asset_class'][i]
break
return asset_class
print('start getting portfolio')
# ローカルに用意したファイルの読み込み
inv_trust_list = pd.read_csv('./investment_list.csv',encoding='SHIFT-JIS')
# 項目の用意
set_column5 = ['asset_class','total','value','gainloss','name']
# 投資信託の表を取得
table_mf = browser.find_element(by=By.CLASS_NAME, value='table-mf')
trs = table_mf.find_elements(By.TAG_NAME,'tr')
nrow = len(trs)
mf_data = []
for i in range(1,nrow):
mf_name = trs[i].find_elements(By.TAG_NAME,'td')[0].text #銘柄名
mf_value = trs[i].find_elements(By.TAG_NAME,'td')[4].text #評価額
mf_gainloss = trs[i].find_elements(By.TAG_NAME,'td')[6].text #評価損益
asset_class = get_asset_class(mf_name)
mf_value = int(mf_value.replace('円','').replace(',',''))
mf_gainloss = int(mf_gainloss.replace('円','').replace(',',''))
mf_total = mf_value - mf_gainloss
mf_data.append([asset_class,mf_total,mf_value,mf_gainloss,mf_name])
mf_df = pd.DataFrame(data=mf_data,columns=set_column5)
例)ローカルに用意したデータ(investment_list.csv)
集計 & EXCELファイルにダウンロード
mf_get.py
print('start data editing & start download excel')
# 集計
df = mf_df.groupby(['asset_class']).sum(['total','value','gainloss'])
# 日付をファイル名につけて、その日の資産一覧を保存
filename = './' + datetime.date.today().strftime('%Y%m%d') + '_asset-list.xlsx'
with pd.ExcelWriter(filename) as writer:
df.to_excel(writer, sheet_name='投資信託集計')
print('done')
まとめ
- MoneyFoward MEの資産データを取得し、自分の好きな分類にてして、集計・ダウンロードしました。
- 使用しているサービスが100%自分の思い通りのものであればよいですが、そうでない場合は、自分でカスタマイズを加えることができるのは、プログラムを勉強するモチベーションになるかと思います。