0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【AI投資 × RPA】PADでのWebスクレイピングが止まりまくるので対策を整理してみた

0
Posted at

1. はじめに

以前の記事で、Power Automate Desktop(PAD)を用いた
ファンダメンタルズ分析の自動化について紹介しました。

今回はその続きとして、実運用で発生した問題と改善内容について整理します。
結論から言うと、「Webスクレイピングは思ったより不安定」という、
ある意味当たり前ですが重要な話です。

Coffee Break :coffee:
早速、雑談。あまりにも不安定過ぎて、結局、週一ぐらいで調整していた気がします。これで自動化と呼べるのか💦

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での取得

FRED
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や安定化の工夫があれば、ぜひ教えてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?