• #Koyfin
  • #Selenium
  • #WebScraping
  • #Python
  • #Chrome拡張機能

Koyfin データ自動取得ツール仕様書

概要

Koyfinの企業別Estimatesページから、複数企業のテーブルデータを自動取得し、CSVファイルとして保存するツール。

技術スタック

  • Python
  • Selenium WebDriver (Chrome)
  • Chrome拡張機能(テーブルコピー用、別途提供)

動作環境

  • Windows

入力

企業リスト

Pythonのdictionary形式で渡す:

companies = {
    "NVDA": "https://app.koyfin.com/estimates/eac/eq-212q1o",
    "AVGO": "https://app.koyfin.com/estimates/eac/eq-8o3iqk",
    "AVGO": "https://app.koyfin.com/estimates/eac/eq-hi81x7",
    # ... 100社程度
}
  • key: ティッカーシンボル(ファイル名に使用)
  • value: KoyfinのURL

Chrome拡張機能

  • 拡張機能のパスを指定して読み込む
    • C:\Users\numbe\Git_repo\chrome-extension-kofyin
  • 拡張機能はページ内にコピーボタンを挿入する
  • ボタンをクリックするとテーブルデータがクリップボードにコピーされる
  • ボタンのセレクタは拡張機能のソースコードを参照

出力

フォルダ構造

output/
  └── YYYY-MM-DD_N/      # 例: 2024-12-02_1
      ├── NVDA.csv
      ├── AVGO.csv
      ├── ORCL.csv
      └── ...

フォルダ命名規則

  • {今日の日付}_{連番}
  • 同日に複数回実行する場合、連番をインクリメント(_1,_2, _3...)

CSVファイル

  • 1企業につき1ファイル
  • ファイル名: {ティッカーシンボル}.csv
  • 内容: クリップボードからコピーしたテーブルデータ

処理フロー

1. 出力フォルダを作成(日付_連番)
2. Selenium起動(Chrome拡張機能を読み込み)
3. 企業リストをループ:
   a. URLにアクセス
   b. ページ読み込み完了を待機
   c. テーブル全体が表示されるようスクロール処理
      (バーチャルDOMのため、スクロールしないと全データが取得できない)
   d. 拡張機能のコピーボタンをクリック
   e. クリップボードからデータを取得
   f. CSVファイルとして保存
   g. 次の企業へ
4. 完了ログを出力

エラー処理

  • 個別企業でエラーが発生した場合:
    • エラーログを出力
    • その企業をスキップして次へ続行
    • 最後にエラーになった企業の一覧を表示

注意事項

スクロール処理が必要

  • Koyfinのテーブルはバーチャルスクロール(仮想DOM)を使用
  • 表示範囲外のデータはDOMに存在しない
  • テーブル全体を取得するには、スクロールしながらデータを読み込む必要あり
  • 拡張機能がこの処理を担当している可能性あり(要確認)

待機処理

  • ページ読み込み後、適切なsleep/waitを入れる
  • クリップボードへのコピー後も少し待機が必要な場合あり

ログイン

  • Koyfinへのログインが必要な場合は、手動ログイン後のセッションを使うか、自動ログイン処理を追加

拡張機能について

  • 拡張機能のソースコードを別途提供予定
  • ボタンのセレクタ、動作仕様はソースコードを参照して実装すること

実行例

# 企業リスト
companies = {
    "NVDA": "https://app.koyfin.com/estimates/eac/eq-8o3iqk",
    "AVGO": "https://app.koyfin.com/estimates/eac/eq-xxxxx",
}

# 拡張機能のパス
extension_path = "C:/path/to/extension"

# 実行
scraper = KoyfinScraper(extension_path)
scraper.run(companies)

成果物

  • koyfin_scraper.py : メインスクリプト
  • 必要に応じてrequirements.txt