1. はじめに
以前の記事で、Power Automate Desktop(PAD)を用いた
ファンダメンタルズ分析の自動化について紹介しました。
今回はその続きとして、実運用で発生した問題と改善内容について整理します。
結論から言うと、「Webスクレイピングは思ったより不安定」という、
ある意味当たり前ですが重要な話です。
Coffee Break ![]()
早速、雑談。あまりにも不安定過ぎて、結局、週一ぐらいで調整していた気がします。これで自動化と呼べるのか💦
2. 発生している問題
実際に運用してみると、以下のような問題が頻発しました。
- Webページの仕様変更で取得失敗
- サーバー側の応答遅延・不安定
- JavaScriptによる後処理の影響で値が取得できない
- リトライ処理を入れても安定しない
特に厄介なのが、
「一見、成功しているが、中身が空 or 不正」
というパターンです。
3. PAD単体での限界
PAD(Power Automate for Desktop)はGUI操作ベースのため、
- ページ読み込みタイミング依存
- DOM構造変更に弱い
- JavaScript描画に依存
といった特徴があります。
つまり、「人が見る前提のWeb」を無理やり機械で扱っているという構造的な弱さがあります。
4. 検討した対策
下記 3つの方法を検討してみました。
4.1. Python(requests)での取得
import requests
url = "https://example.com"
res = requests.get(url)
【メリット】
- 軽量・高速
- シンプル
【デメリット】
- 最近はbot対策でブロックされやすい
- JavaScript後処理に対応できない
【結論】 安定しないケースが多い
4.2. Python(Selenium)での取得
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://example.com")
【メリット】
- JavaScript対応可能
- 実ブラウザと同じ動作
【デメリット】
- 重い
- 不安定(PADと本質的に同じ)
- タイミング依存
【結論】:PADの延長線。根本解決ではない
4.3. WebAPIでの取得
from fredapi import Fred
fred = Fred(api_key='YOUR_API_KEY')
cpi = fred.get_series('CPIAUCSL')
【メリット】
- 安定性が高い
- DOM構造やUI変更の影響を受けない
- レスポンスが構造化されており扱いやすい
(JSONなど) - リトライ処理が有効に機能する
【デメリット】
- APIキーが必要な場合が多い
- 無料枠では回数制限がある
- 高品質なデータは有料になることが多い
- 提供されていないデータは取得できない
【結論】
「最初から機械向けに提供されているデータを使うべき」
スクレイピングは「人間向けのWebを無理やり取得する」手法ですが、WebAPIは「機械利用を前提に設計された仕組み」です。
そのため、
安定性・再現性・保守性の観点ではWebAPIが圧倒的に有効であると結論付けました。
5. WebAPIの具体例(ファンダメンタルズ分析向け)
ファンダメンタルズ分析向けのWebAPIをいくつか紹介します。
5.1. マクロ経済データ系(最も安定・王道)
Federal Reserve Economic Data(FRED)
- アメリカの経済指標(CPI、GDP、金利など)
- 無料で利用可能(APIキーあり)
- 信頼性が非常に高い
例
from fredapi import Fred
fred = Fred(api_key='YOUR_API_KEY')
cpi = fred.get_series('CPIAUCSL')
おすすめ度:★★★★★(まずはここ)
5.2. 為替・市場データ系
Alpha Vantage
- 為替、株価、テクニカル指標
- 無料枠あり(回数制限あり)
例
import requests
url = "https://www.alphavantage.co/query"
params = {
"function": "FX_DAILY",
"from_symbol": "USD",
"to_symbol": "JPY",
"apikey": "YOUR_API_KEY"
}
res = requests.get(url, params=params)
data = res.json()
おすすめ度:★★★★☆(個人開発向け)
Twelve Data
- 為替・株・暗号資産
- シンプルで扱いやすい
おすすめ度:★★★★☆
5.3. 高品質・業務レベル
Bloomberg API
- 金融機関レベルのデータ
- 圧倒的な信頼性
おすすめ度:★★★★★(法人向け)
Refinitiv
おすすめ度:★★★★★(法人向け)
5.4. 軽量・無料寄り(補助用途)
Yahoo Finance
- 非公式API(yfinanceなど)
- 手軽に使える
例
import yfinance as yf
data = yf.download("USDJPY=X", period="1mo")
おすすめ度:★★★☆☆(検証用)
5.4. 経済イベント・カレンダー系(重要)
Trading Economics
- 経済指標カレンダー
- 実績値・予想値・重要度
おすすめ度:★★★★★(かなり実用的)
補足:低頻度用途ならどうするか
「そこまでリアルタイム性が不要」という場合は、Yahoo Finance などの一般公開サイトを低頻度バッチで取得するのも現実的です。
※スクレイピング可否は利用規約に従う必要があります
6. 今後の方針
現時点では以下の構成を検討しています。
- 基本:WebAPIベース
- 補助:スクレイピング(フォールバック用途)
- PAD:オーケストレーション専用
つまり、「取得」と「制御」を分離する方向にシフトしています。
7. まとめ
- Webスクレイピングは壊れる前提で設計する
- GUI操作は最後の手段
- 安定性重視ならWebAPI
そして何より、
「自動化は作るより、安定させる方が難しい」
と感じました。
同じようにPADやスクレイピングで悩んでいる方の参考になれば嬉しいです。
もしおすすめのAPIや安定化の工夫があれば、ぜひ教えてください!