あすけんの過去データをCSVで全取得した(コピペで使えるPythonコードもある)

生成AI

「あすけんの記録がデータとしてほしい。」

毎日の体重や体脂肪率の記録が、10年分くらいアプリの中に残っています。ただ、あすけんは直近2年分くらいしか見られないので長期間の変化がちょっと見にくい…

そう思ったのですが、あすけんにはデータのエクスポート機能がなかった!!!

しかたがないので、ブラウザを自動操作してデータを抜き出すPythonスクリプト を書きました。

私がやりたかったことはこれで実現できたので、同じように「過去データが欲しい」という人のためにコードを置いておきます。

やりたかったこと

  • 2017年から現在までの「体重」「体脂肪率」を全取得したい。
  • 手作業でポチポチ書き写すのは無理だし、やだ。
  • 取得したデータはCSV形式(→スプレッドシートに書き込みたいから)

やったこと(解決方法)

Pythonを使ってブラウザ操作でデータを取得→CSV作成までをおこない、手作業でCSVをスプレッドシートにインポートしました。結果はこんな感じ。

体重と体脂肪率は秘密ですが、数年単位のグラフ化も即作成可能でした。

解決したコード(Python + Selenium)

PythonとSeleniumを使って、Chromeブラウザを自動操作する方法で解決しました。

ログインを手動で済ませれば、あとはスクリプトが勝手にページを巡回して、データがある日だけをCSVに保存してくれます。

準備1.Pythonのインストール

Pythonのインストールが必要なので、もし使ったことがない場合は公式サイトからPythonをインストールしましょう。

Download Python
The official home of the Python Programming Language

公式サイトに[Download Python install manager]というボタンを押してインストールできます。

Pythonがインストールできているかわからない人は、バージョン確認を実行します。

python --version

このようにバージョンが表示されたらOKです。

インストールする際の設定で「Add Python to PATH」をONにする必要があるので忘れずに。

忘れたら、設定から変更します。

準備2.ライブラリをインストールする

Pythonが動く環境で、必要なライブラリを入れます。

pip install selenium webdriver_manager

これを実行するとずらずらと文字が書かれますが、終わるまで待ちます。

準備3.コードを保存する(asken_auto.py)

以下のコードを asken_auto.py という名前で保存します。

テキストファイルを開く>下のコードをコピペする>>名前を付けて保存>>拡張子を消してasken_auto.py」で保存

START_DATE (開始日)、END_DATE (終了日)は、ご自身の取得したい日付に変更してください。

import csv
import time
import random
from datetime import datetime, timedelta

# ブラウザ自動操作用ライブラリ
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from webdriver_manager.chrome import ChromeDriverManager
from selenium.common.exceptions import WebDriverException

# ==========================================
# 設定エリア
# ==========================================
# 取得したい期間(↓ここを変更)
START_DATE = '2017-01-01'
END_DATE = '2026-01-02'

# 保存するファイル名
OUTPUT_FILE = 'asken_history.csv'
# ==========================================

def main():
    print("ブラウザを起動しています...")
    driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
    
    # 1. ログイン画面を開く
    driver.get("https://www.asken.jp/login")
    
    print("\n" + "="*50)
    print("【重要】手動でログインしてください!")
    print("ログイン完了後、この黒い画面に戻って【Enterキー】を押してください。")
    print("="*50 + "\n")
    
    # ログイン待ち
    input("ログイン完了後にここをクリックして、Enterキーを押してください >> ")

    print(f"データ取得を開始します... ({START_DATE} 〜 {END_DATE})")

    # ファイルを開く
    with open(OUTPUT_FILE, 'w', newline='', encoding='utf-8-sig') as f:
        writer = csv.writer(f)
        writer.writerow(['日付', '体重(kg)', '体脂肪率(%)'])
        f.flush() # ヘッダーを即時保存

        current_date = datetime.strptime(START_DATE, '%Y-%m-%d')
        end_date = datetime.strptime(END_DATE, '%Y-%m-%d')
        
        while current_date <= end_date:
            date_str = current_date.strftime('%Y-%m-%d')
            # その日の記録ページへ直接ジャンプ
            target_url = f"https://www.asken.jp/wsp/comment/{date_str}"
            
            try:
                driver.get(target_url)
                
                # 体重と体脂肪の入力欄を取得
                weights = driver.find_elements(By.NAME, "data[Body][weight]")
                fats = driver.find_elements(By.NAME, "data[Body][body_fat]")

                val_weight = ""
                val_fat = ""

                if weights: val_weight = weights[0].get_attribute("value")
                if fats: val_fat = fats[0].get_attribute("value")

                # データがある場合のみCSVに書き込み
                if val_weight:
                    writer.writerow([date_str, val_weight, val_fat])
                    f.flush() # 即時保存(PCが落ちてもデータが残るように)
                    print(f"[{date_str}] 体重: {val_weight}kg, 体脂肪: {val_fat}%")
                else:
                    # データがない日はドットを表示
                    print(".", end="", flush=True)

            except WebDriverException:
                print(f"\n[FATAL] ブラウザが閉じられました。処理を終了します。")
                break
            except Exception as e:
                print(f"\n[{date_str}] エラー: {e}")

            current_date += timedelta(days=1)
            
            # サーバー負荷軽減のため少し待機
            time.sleep(random.uniform(0.5, 1.0))

    print(f"\n終了しました。")
    try:
        driver.quit()
    except:
        pass

if __name__ == "__main__":
    main()

実行

1. コマンドで python asken_auto.py を実行

2. Chromeが立ち上がるので、手動でログインする。

3. ログインしたらターミナル(黒い画面)に戻ってEnterを押す。

あとは完了までPCが落ちないように気を付けつつ、放置しておけばCSVファイルが出来上がります。

データの取得中はこのようにページを順々に開いてデータを取得します。

これは3倍速なので、この1/3の速度でページが自動で切り替わってデータを取ります。

「終了しました」と表示されたら、CSVが同フォルダに格納されているので、このCSVはスプレッドシートに書き込んでもいいし、ちがうファイルに書き込んでもいいし。

処理中はPCがスリープしないようにしてください。私は3時間くらい実行に時間がかかりました。

失敗談:ちなみに…Claudeにブラウザ操作を頼んだら爆死した。

ここからは余談ですが、最初はClaude Computer Useにブラウザ操作を任せれば、簡単だしいけるだろ。と思っていたんです。

が、実際にやってみたら、まったくうまくいきませんでした。

まず、AIが「画面を見て、次の月へボタンを押す」という動作が人間と同じくらいの速度なので、8年分(約100ヶ月)を巡回するのにものすごく時間がかかり。
さらに、AIがスプレッドシートを開いて、セルをクリックしてキーボードで数字を手入力し始めた時に、これは果てしなく時間がかかると確信。

極めつけに、この程度の操作でトークンをざぶざぶ消費していったので、1か月分くらい書き写して諦めました。API従量課金だったらと思うとゾッとします。

単純なデータ収集には、やっぱりPythonスクリプトが確実で早かった。

もしあすけんのデータが欲しくて困っている方がいたら、上のコードを使ってみてください。