財務データをスクレイピングする方法

Pythonを使用して財務データを手動で収集したり、構造出力用のAPIを使用してプロセスを自動化したりする方法を学びましょう。
3 分読
How to Scrape Financial Data blog image

この記事では、財務データを手動で収集する方法や、Bright Data財務データスクレイパーAPIを使用してプロセスを自動化する方法を学びます。

スクレイピングしたいコンテンツとその構成について知っておく

財務データには、広範で複雑な情報が含まれることが一般的です。スクレイピングを開始する前には、必要なデータの種類を確実に特定しておく必要があります。

例として、株式の最新価格だけでなく、その日の始値・終値や高値・安値、また時間の経過とともに発生した価格変動情報のスクレイピングが必要となる場合があります。また業績の評価には、会社の損益計算書、貸借対照表(資産と負債の概要)、キャッシュフロー計算書(入出金の追跡)などの財務情報も必要となります。財務比率やアナリストによる評価、レポートは売買時の意思決定の指針となり、最新情報やSNSの心理分析は市場動向についてのさらなるインサイトを提供します。

ウェブページ上のデータ構成を理解しておくことにより、必要なデータの特定とスクレイピングが簡単に実現します。

法的および倫理的考慮事項を分析する

ウェブサイトをスクレイピングする前に、当該サイトの利用規約を必ず確認しましょう。多くのウェブサイトは、事前の同意や許可なしでのスクレイピングを禁止しています。

また、 robots.txt ファイルのルールに従う必要があります。このファイルには、サイトのどの部分にアクセスできるかが記載されています。また、リクエストによりサーバーが過負荷状態にならないようにし、リクエスト間には遅延を実装するようにしましょう。これにより、ウェブサイトのリソースを保護し、あらゆる問題を回避することができます。

ブラウザ開発ツールを使用する

ウェブページのHTML要素を表示するには、ブラウザの開発者ツールを使用します。これらのツールは、ChromeやSafari、Edgeなど、ほとんどの最新ブラウザに組み込まれています。開発者ツールを開くには、Windowsでは Ctrl+Shift+I 、Macでは Cmd+Option+I を押すか、ページを右クリックして 要素を検証を選択します。

ツールが開き次第、ページのHTML構造を検証し、特定のデータ要素を識別することができます。 Elements タブにはドキュメントオブジェクトモデル(DOM)ツリーが表示され、ページ上の要素を見つけて強調表示することができます。 Network タブにはすべてのネットワークリクエストが表示され、APIエンドポイントや動的に読み込まれたデータを検索するのに役立ちます。 Console タブでは、JavaScriptコマンドを実行したり、ページのスクリプトを操作したりすることができます。

このチュートリアルでは、 Yahoo!ファイナンスから APPL株をスクレイピングします。関連するHTMLタグを特定するには、 APPL株 ページに移動し、ページに表示されている価格を右クリックして、 要素を検証をクリックします。 Elements タブでは、価格を含むHTML要素が強調表示されます。

Yahoo!ファイナンスの要素を検証

スクレイパーでこの要素を見つけやすいように、タグ名や、 class または idなどの固有の属性を記録しておきましょう。

環境およびプロジェクトの設定方法

このチュートリアルでは、簡潔なだけでなく、優れたライブラリが利用可能な [Python]((https://www.python.or) をWebスクレイピングに使用します。開始する前には、必ずシステムに Python 3.10以上 がインストールされていることを確認しましょう。

Pythonを入手し次第、ターミナルまたはシェルを開き、次のコマンドを実行してディレクトリおよび仮想環境を作成します。

mkdir scrape-financial-data 
cd scrape-financial-data 
python3 -m venv myenv

仮想環境は、作成後にアクティブにする必要があります。アクティベーションコマンドはオペレーティングシステムによって異なります。

Windowsの場合、次のコマンドを実行します。

.\myenv\Scripts\activate

macOS/Linuxの場合、次のコマンドを実行します。

source myenv/bin/activate

仮想環境を有効にしたら、 pipを使用して必要なライブラリをインストールします。

pip3 install requests beautifulsoup4 lxml

このコマンドは、HTTPリクエストの処理には Requests ライブラリ、HTMLコンテンツの解析には Beautiful Soup 、またXMLとHTMLの効率的な解析には lxml をインストールします。

財務データを手動でスクレイピングする方法

財務データを手動でスクレイピングするには、 manual_scraping.py という名前のファイルを作成し、次のコードを追加して必要なライブラリをインポートします。

import requests
from bs4 import BeautifulSoup

スクレイピングしたい財務データのURLを設定します。前述のとおり、このチュートリアルではApple株(AAPL)について記載された Yahoo!ファイナンス のページを使用します。

url = 'https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch'

URLを設定したら、次のURLにGETリクエストを送信します。

headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)

このコードには、ブラウザのリクエストを模倣する User-Agent ヘッダーが含まれており、ターゲットウェブサイトによるブロックを回避するのに役立ちます。

このとおり、リクエストが成功したことを確認します。

if response.status_code == 200:
    print('Successfully retrieved the webpage')
else:
    print(f'Failed to retrieve the webpage. Status code: {response.status_code}')
    exit()

次に、 lxml パーサを使用してウェブページのコンテンツを解析します。

soup = BeautifulSoup(response.content, 'lxml')

固有の属性に基づいて要素を特定し、テキストの内容を抽出して、抽出されたデータを出力します。

# Extract specific company details
try:
    # Extract specific company details
    previous_close = soup.find('fin-streamer', {'data-field': 'regularMarketPreviousClose'}).text.strip()
    open_price = soup.find('fin-streamer', {'data-field': 'regularMarketOpen'}).text.strip()
    day_range = soup.find('fin-streamer', {'data-field': 'regularMarketDayRange'}).text.strip()
    week_52_range = soup.find('fin-streamer', {'data-field': 'fiftyTwoWeekRange'}).text.strip()
    market_cap = soup.find('fin-streamer', {'data-field': 'marketCap'}).text.strip()
    # Extract PE Ratio (TTM)
    pe_label = soup.find('span', class_='label', title='PE Ratio (TTM)')
    pe_value = pe_label.find_next_sibling('span').find('fin-streamer').text.strip()

    # Extract EPS (TTM)
    eps_label = soup.find('span', class_='label', title='EPS (TTM)')
    eps_value = eps_label.find_next_sibling('span').find('fin-streamer').text.strip()

    # Print the scraped details
    print("\n### Stock Price ###")
    print(f"Open Price: {open_price}")
    print(f"Previous Close: {previous_close}")
    print(f"Day's Range: {day_range}")
    print(f"52 Week Range: {week_52_range}")
    print("\n### Company Details ###")
    print(f"Market Cap: {market_cap}")
    print(f"PE Ratio (TTM): {pe_value}")
    print(f"EPS (TTM): {eps_value}")

except AttributeError as e:
    print("Error while scraping data. Some fields may not be found.")
    print(e)

コードを実行してテストする

コードをテストするには、ターミナルまたはシェルを開き、次のコマンドを実行します。

python3 manual_scraping.py

次のように出力されるはずです。

Successfully retrieved the webpage

### Stock Price ###
Open Price: 225.20
Previous Close: 225.00
Day's Range: 225.18 - 229.74
52 Week Range: 164.08 - 237.49

### Company Details ###
Market Cap: 3.447T
PE Ratio (TTM): 37.50
EPS (TTM): 37.50

手動スクレイピングで課題に対処する

データの手動スクレイピングは、回避戦略が必要となるCAPTCHAやIPブロックの発生など、さまざまな理由で困難になる場合があります。データが乱雑であったり、構造化されていなかったりすると、解析エラーの原因となる可能性があり、適切な権限なしでのスクレイピングは、法的な問題を引き起こす可能性があります。また、ウェブサイトの頻繁な更新によってスクレイパーが機能しなくなり、継続的な機能のために定期的なコードのメンテナンスが必要になる場合があります。

スクレイパーを構築して自動化するには、データの分析ではなく、コードの作成および修正により多くの時間を費やす必要があります。大量のデータを扱う際には、データがクリーンで整理されていることを確認する必要があるため、さらに困難になる可能性があります。さまざまなウェブサイトの構造を管理する場合、あらゆるウェブ技術について理解しておく必要があります。

これは、データを頻繁かつ迅速にスクレイピングする必要がある場合、手動によるWebスクレイピングが最適な選択肢ではないことを意味します。

Bright Data財務データスクレイパーAPIを使用してデータをスクレイピングする方法

Bright Data は、データ抽出の自動化を行う財務データスクレイパーAPIにより、手動スクレイピングの課題に対処しています。このAPIには、IPブロックを防ぐためのローテーションプロキシによるプロキシ管理が組み込まれています。JSONやCSVなどの形式で構造化データを返し、拡張性も高いため、大量のデータを簡単に処理することができます。

財務データスクレイパーAPIを使用するには、 Bright Dataのウェブサイトで無料アカウントの登録を行ってください。メールアドレスを確認し、必要な本人確認手順をすべて完了してください。

アカウントを設定したら、ログインしてダッシュボードにアクセスし、APIキーを取得します。

財務データスクレイパーAPIを設定する

ダッシュボード内の左側のナビゲーションタブから、 WebスクレイパーAPI に移動します。 カテゴリ から
財務データ を選択し、 Yahoo!ファイナンスのビジネス情報 – URLで収集をクリックして開きます。

コントロールパネルのWebスクレイパーAPI

 API呼び出しの設定を開始をクリックします。

API呼び出しを設定する

APIを使用するには、Bright DataスクレイパーでのAPI呼び出しを認証するトークンを作成する必要があります。新しいトークンを作成するには、 トークンの作成をクリックします。

新しいAPIトークンを作成する

ダイアログが開きます。 権限 を「管理者」に、期間を「無制限」に設定します。

新しいAPIトークンにおける権限を設定する

この情報を保存すると、トークンが作成され、新しいトークンの入力が求められます。これはすぐにまた必要になるため、必ず安全な場所に保存しておきましょう。

取得した新しいAPIトークン

トークンがすでに作成されている場合、 APIトークンの ユーザー設定から取得することができます。ユーザーの 詳細 タブを選択し、 トークンのコピー をクリックします。

スクレイパーを実行して財務データを取得する

 Yahoo!ファイナンスのビジネス情報 ページより、 APIトークン フィールドにAPIトークンを追加し、ターゲットウェブサイトの株式URL( https://finance.yahoo.com/quote/AAPL/)を追加します。右側の 認証済みリクエスト セクションにあるリクエストをコピーします。

スクレイパーURLを設定する

ターミナルまたはシェルを開き、 curlを使用してAPI呼び出しを実行します。次のように表示されるはずです。

curl -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" -d '[{"url":"https://finance.yahoo.com/quote/AAPL/"}]' "https://api.brightdata.com/datasets/v3/trigger?dataset_id=YOUR_DATA_SET_ID&include_errors=true"

コマンドを実行すると、 snapshot_id というレスポンスが返されます。

{"snapshot_id":"s_m3n8ohui15f8v3mdgu"}

 snapshot_id をコピーして、ターミナルまたはシェルから次のAPI呼び出しを実行します。

curl -H "Authorization: Bearer YOUR_TOKEN" "https://api.brightdata.com/datasets/v3/snapshot/YOUR_SNAP_SHOT_ID?format=jsonl"

 YOUR_TOKEN と YOUR_SNAP_SHOT_ID の欄は、必ずご自身の認証情報に置き換えてください。

このコードを実行すると、スクレイピングされたデータが出力されるはずです。データは、次の JSONファイルのように表示されるはずです。

スナップショットが準備できていないというレスポンスが返された場合は、10秒待ってから再試行してください。

HTML構造を分析したり、特定のタグを見つけたりする必要なく、Bright Data財務データスクレイパーAPIにより、必要なデータがすべて抽出されました。 earning_estimate、 earnings_history、 growth_estinatesなどの追加フィールドを含む、ページ全体のデータが取得されました。

このチュートリアルで使用されたコードは、 このGitHubリポジトリより利用可能です。

Bright Data APIを使用するメリット

Bright Data財務データスクレイパーAPIでは、スクレイピングコードを書いたり管理したりする必要がないため、スクレイピングプロセスが簡素化されます。また、このAPIはプロキシローテーションを管理し、ウェブサイトの利用規約を厳守することでコンプライアンス遵守の徹底も行うため、ブロックされたりルールに違反したりすることを恐れずにデータを収集することができます。

Bright Data財務データスクレイパーAPIは、必要最低限のコーディングで信頼性の高い構造化データを提供します。ページナビゲーションとHTML解析が自動的に処理されるため、プロセスが効率化されるのです。また、APIの拡張性により、コードに大きな変更を加えることなく、数多くの株式およびその他の財務指標に関するデータを収集することができます。ウェブサイトの構造が変更されるとBright Dataによりスクレイパーが更新されるため、メンテナンスも最小限に抑えられ、余分な作業なしでデータ収集をスムーズに継続することができます。

まとめ

財務データの収集は、財務分析やアルゴリズム取引、市場調査に携わる開発者やデータチームにとって重要なタスクです。今回の記事では、Pythonと Bright Data財務データスクレイパーAPIを使用して財務データを手動でスクレイピングする方法を学びました。データの手動スクレイピングでは制御が可能となりますが、スクレイピング対策やメンテナンスのオーバーヘッドを処理するのは難しく、拡張も困難です。

Bright Data財務データスクレイパーAPIは、プロキシローテーションやCAPTCHA解決などの複雑なタスクを管理することにより、データ収集の効率化を実現します。API以外にも、 Bright Data は データセットや 住宅用プロキシ、 Web スクレイピングプロジェクトを強化するためのスクレイピングブラウザ などを提供しています。 無料トライアルに登録し 、Bright Dataが提供する機能のすべてを体験しましょう。

クレジットカードは必要ありません

あなたは下記にもご興味がおありかもしれません

web scraping with claude blog image
ウェブデータ

2025年のクロードによるウェブスクレイピング

Pythonを使ってWebスクレイピングを自動化し、構造化データを楽に抽出するClaude AIの使い方を学ぶ。
18 分読
Building AI-Ready Vector Datasets for LLMs blog image
AI

LLMのためのAI対応ベクトルデータセット構築:Bright Data、Google Gemini、Pineconeを使ったガイド

大規模言語モデル(LLM)は、私たちが情報にアクセスし、インテリジェントなアプリケーションを構築する方法を変革しています。LLMの可能性を最大限に引き出すには、特にドメイン固有の知識や独自のデータを使用する場合、高品質で構造化されたベクトルデータセットを作成することが重要です。LLMの性能と精度は、入力データの品質に直接結びついています。準備不足のデータセットは劣悪な結果をもたらす可能性があり、一方、十分にキュレーションされたデータセットはLLMを真のドメイン・エキスパートに変えることができます。 このガイドでは、AIに対応したベクターデータセットを生成するための自動パイプラインの構築方法を順を追って説明する。 課題:LLMのためのデータ収集と準備 LLMは膨大な汎用テキストコーパスで学習されますが、商品関連のクエリへの回答、業界ニュースの分析、顧客フィードバックの解釈など、特定のタスクやドメインに適用すると、不足することがよくあります。LLMを真に役立てるには、ユースケースに合わせた高品質のデータが必要です。 このデータは通常、ウェブ上に分散していたり、複雑なサイト構造の背後に隠されていたり、ボット対策によって保護されていたりする。 当社の自動ワークフローは、データセット作成の最も困難な部分を処理する合理化されたパイプラインでこれを解決します: コア技術の概要 パイプラインを構築する前に、関連するコアテクノロジーと、それぞれがワークフローをどのようにサポートしているかを簡単に見ておこう。 ブライトデータスケーラブルなウェブデータ収集 AIに対応したベクターデータセットを作成するための最初のステップは、関連性のある高品質なソースデータを収集することです。ナレッジベースやドキュメンテーションのような内部システムから得られるものもあるが、大部分は公共のウェブから得られることが多い。 しかし、最近のウェブサイトは、CAPTCHA、IPレート制限、ブラウザフィンガープリントなどの高度なボット対策メカニズムを使用しているため、大規模なスクレイピングは困難である。 Bright Dataは、データ収集の複雑さを抽象化するWeb Unlocker APIでこの課題を解決します。プロキシのローテーション、CAPTCHAの解決、ブラウザのエミュレーションを自動的に処理するため、データへのアクセス方法ではなく、データに集中することができます。 Google Gemini: インテリジェント・コンテンツ・トランスフォーメーション Geminiは、Googleによって開発された強力なマルチモーダルAIモデルのファミリーであり、様々なタイプのコンテンツを理解し処理することに優れている。私たちのデータ抽出パイプラインにおいて、Geminiは3つの重要な機能を果たします: このAIを活用したアプローチは、特に以下のような使用例において、脆弱なCSSセレクタや壊れやすい正規表現に依存する従来の方法よりも大きな利点をもたらす: AIがデータ抽出プロセスにどのような変化をもたらしているかについては、Using AI for Web Scrapingをご覧ください。スクレイピングのワークフローにGeminiを実装するための実践的なチュートリアルをお探しの場合は、包括的なガイドをご覧ください:GeminiによるWebスクレイピングをご覧ください。 文の変形意味埋め込み文の生成 エンベッディングは、高次元空間におけるテキスト(または他のデータタイプ)の密なベクトル表現である。これらのベクトルは意味的な意味を捉え、コサイン類似度やユークリッド距離のようなメトリクスを用いて測定される、類似したテキスト片を近接したベクトルで表現することを可能にする。この特性は、セマンティック検索、クラスタリング、検索拡張生成(RAG)のようなアプリケーションで重要である。 Sentence Transformersライブラリは、高品質の文や段落の埋め込みを生成するための使いやすいインターフェースを提供する。Hugging Face Transformersの上に構築され、意味タスクのために微調整された幅広い事前学習済みモデルをサポートしています。 このエコシステムで最も人気があり、効果的なモデルの1つがオールMiniLM-L6-v2である: より大きなモデルはより微妙なエンベディングを提供するかもしれないが、all-MiniLM-L6-v2は性能、効率、コストの間で非常に優れたバランスを提供する。その384次元ベクトルは ほとんどの実用的なユースケース、特に初期段階の開発やリソースに制約のある環境では、このモデルで十分すぎる。エッジケースにおける精度のわずかな低下は、通常、スピードとスケーラビリティの大幅な向上によって相殺されます。そのため、AIアプリケーションの最初のイテレーションを構築する場合や、控えめなインフラストラクチャでパフォーマンスを最適化する場合は、all-MiniLM-L6-v2を使用することをお勧めします。 Pineconeベクトル埋め込み画像の保存と検索 テキストがベクトル埋め込みデータに変換されると、それを効率的に保存、管理、照会するための専用のデータベースが必要になります。従来のデータベースはこのために設計されていません。ベクトル・データベースは、埋め込みデータの高次元の性質を扱うために特別に設計されており、RAGパイプライン、セマンティック検索、パーソナライゼーション、その他のAI駆動型アプリケーションに不可欠なリアルタイムの類似性検索を可能にします。 Pineconeは、開発者フレンドリーなインターフェイス、低レイテンシの検索パフォーマンス、完全に管理されたインフラストラクチャで知られる人気のベクトルデータベースです。ベクトル検索インフラストラクチャの複雑さを抽象化することで、複雑なベクトルインデックスと検索を効率的に管理します。主なコンポーネントは以下の通りです: Pineconeは2つのデプロイメントアーキテクチャを提供する:ServerlessとPod-Based です。ほとんどのユースケース、特に開始時や動的な負荷に対処する場合は、シンプルさとコスト効率からサーバーレスが推奨されます。 セットアップと前提条件 パイプラインを構築する前に、以下のコンポーネントが適切に設定されていることを確認する。 前提条件 各APIキーの生成方法については、以下のツール固有の設定セクションを参照してください。 必要なライブラリのインストール このプロジェクトのコアとなるPythonライブラリをインストールする: これらのライブラリーは提供している: 環境変数の設定 プロジェクトのルート・ディレクトリに.envファイルを作成し、APIキーを追加する: ブライトデータ設定 Bright DataのWeb Unlockerを使用するには: 実装例と統合コードについては、Web Unlocker GitHub […]
6 分読
AI

LLMにおけるスーパーバイズド・ファインチューニングとは?

このPythonガイドでは、概念、ツール、ワークフロー、そしてAIプロジェクトを向上させる実践的な例を取り上げています。
7 分読