TL:DR:取引・投資向けの財務分析に活用できるYahoo Financeスクレイパーを作成して株式データを抽出する方法を学びましょう。
このチュートリアルでは、次の内容を取り上げます。
- ウェブから財務データをスクレイピングするのはなぜか?
- 財務スクレイピングのライブラリとツール
- Seleniumを使ってYahoo Financeから株式データをスクレイピングする
ウェブから財務データをスクレイピングするのはなぜか?
ウェブから財務データをスクレイピングすることで、以下のようなさまざまな場面で役立つ貴重なインサイトを得られます。
- 自動取引:開発者は、株価や出来高など、市場のリアルタイムデータや履歴データを収集することで、自動取引戦略を構築できます。
- テクニカル分析:テクニカルアナリストにとって、市場の履歴データと指標は非常に重要です。これらを利用してパターンやトレンドを把握し、投資の意思決定に活用できます。
- 財務モデリング:研究者やアナリストは、財務諸表や経済指標などの関連データを収集し、企業業績の評価、収益予測、投資機会を評価する複雑なモデルを構築できます。
- 市場調査:財務データは、株式、市場指数、商品に関する多くの情報を提供します。このデータを分析することで、研究者は市場のトレンド、センチメント、業界の健全性を理解し、情報に基づいた投資判断を下せます。
Yahoo Financeは、市場を監視する上で人気のある財務ウェブサイトの1つです。このサイトは、株式、債券、ミューチュアルファンド、コモディティ、通貨、市場指数に関するリアルタイムデータや履歴データなど、幅広い情報とツールを投資家やトレーダーに提供しています。さらに、ニュース記事、財務諸表、アナリストの予測、チャート、その他の貴重なリソースも提供しています。
Yahoo Financeをスクレイピングすることで、財務分析、リサーチ、意思決定プロセスをサポートする豊富な情報にアクセスできます。
財務スクレイピングのライブラリとツール
Pythonは、構文、使いやすさ、ライブラリの豊富なエコシステムのおかげで、スクレイピングに最適な言語の1つと考えられています。Pythonを使ったウェブスクレイピングのガイドをご覧ください。
数あるスクレイピングライブラリの中から適切なものを選ぶため、ブラウザでYahoo Financeを検索してみましょう。サイト上のほとんどのデータがリアルタイムで、または対話処理の後に変更されるのに気づくでしょう。これは、ページを再読み込みせずに、データを動的に読み込んで更新するために、サイトがAJAXを多用していることを示しています。つまり、JavaScriptを実行できるツールが必要です。
Seleniumを使用すると、Pythonで動的なウェブサイトをスクレイピングできるようになります。データのレンダリングや取得にJavaScriptを使用している場合でも、ウェブブラウザでサイトをレンダリングし、プログラムで操作を実行します。
Seleniumがあれば、Pythonを使ってターゲットサイトをスクレイピングできます。その方法を学びましょう!
Seleniumを使ってYahoo Financeから株式データをスクレイピングする
このステップバイステップのチュートリアルに従って、Yahoo FinanceのウェブスクレイピングPythonスクリプトを構築する方法を確認してください。
ステップ1:セットアップ
財務スクレイピングを始める前に、以下の前提条件を満たしていることを確認してください。
- Python 3+がお使いのマシンにインストールされていること:インストーラをダウンロードしてダブルクリックし、インストールウィザードに従って操作を行います。
- お好みのPython IDE:PyCharm Community Edition、またはPython拡張機能付きのVisual Studio Codeなどがよいでしょう。
次に、以下のコマンドを使って、Pythonプロジェクトを仮想環境でセットアップします。
mkdir yahoo-finance-scraper
cd yahoo-finance-scraper
python -m venv env
これで、yahoo-finance-scraper
プロジェクトフォルダが初期化されます。その中に、以下のようにscraper.py
ファイルを追加します。
print('Hello, World!')
Yahoo Financeをスクレイピングするロジックをここに追加します。現時点では、これは「Hello, World!」と表示するだけのサンプルスクリプトです。
起動して、動作することを確認します。
python scraper.py
ターミナルには次のように表示されているはずです。
Hello, World!
これで財務スクレイパー用のPythonプロジェクトができました。あとはプロジェクトの依存関係を追加するだけです。以下のターミナルコマンドで、SeleniumとWebdriver Managerをインストールします。
pip install selenium webdriver-manager
少し時間がかかる場合があります。しばらく待ってください。
webdriver-manager
は厳密には必須ではありません。ただ、Seleniumでウェブドライバを管理するのが非常に簡単になるので、強くお勧めします。このおかげで、ウェブドライバを手動でダウンロード、設定、インポートする必要がなくなります。
scraper.py
を更新する
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
# initialize a web driver instance to control a Chrome window
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# scraping logic...
# close the browser and free up the resources
driver.quit()
このスクリプトは、ChromeWebDriver
のインスタンスをインスタンス化するだけです。データ抽出ロジックを実装するために、すぐにそれを使うことになります。
ステップ2:ターゲットのウェブページに接続する
Yahoo Finenceの株式ページのURLは、以下のようになっています。
https://finance.yahoo.com/quote/AMZN
ご覧のように、これはティッカーシンボルによって変化する動的URLです。この概念に詳しくない方のために説明すると、これは株式市場で取引される株式を一意に識別するために使用される文字列の略称です。例えば、「AMZN」はAmazon株のティッカーシンボルです。
コマンドライン引数からティッカーを読み込むようにスクリプトを修正しましょう。
import sys
# if there are no CLI parameters
if len(sys.argv) <= 1:
print('Ticker symbol CLI argument missing!')
sys.exit(2)
# read the ticker from the CLI argument
ticker_symbol = sys.argv[1]
# build the URL of the target page
url = f'https://finance.yahoo.com/quote/{ticker_symbol}'
s
ys
は、コマンドライン引数へのアクセスを提供するPython標準ライブラリです。インデックス0の引数がスクリプトの名前であることを覚えておいてください。したがって、インデックス1の引数をターゲットにする必要があります。
CLIからティッカーを読み取った後、それをf文字列で使用し、スクレイピングするターゲットURLを生成します。
例えば、Teslaのティッカー「TSLA:」でスクレイパーを起動するとします。
python scraper.py TSLA
url
には以下が含まれます。
https://finance.yahoo.com/quote/TSLA
CLIでティッカーシンボルを指定し忘れると、プログラムは以下のエラーで失敗します。
Ticker symbol CLI argument missing!
Seleniumでページを開く前に、すべての要素が見えるようにウィンドウサイズを設定することをお勧めします。
driver.set_window_size(1920, 1080)
get()関数はブラウザに、目的のページにアクセスするよう指示します。
driver.get(url)
get()
関数はブラウザに、目的のページにアクセスするよう指示します。
Yahoo Financeのスクレイピングスクリプトは、現在のところ次のようになります。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
import sys
# if there are no CLI parameters
if len(sys.argv) <= 1:
print('Ticker symbol CLI argument missing!')
sys.exit(2)
# read the ticker from the CLI argument
ticker_symbol = sys.argv[1]
# build the URL of the target page
url = f'https://finance.yahoo.com/quote/{ticker_symbol}'
# initialize a web driver instance to control a Chrome window
driver = webdriver.Chrome(service=ChromeService(ChromeDriverManager().install()))
# set up the window size of the controlled browser
driver.set_window_size(1920, 1080)
# visit the target page
driver.get(url)
# scraping logic...
# close the browser and free up the resources
driver.quit()
起動すると、このウィンドウが一瞬だけ開いて終了します。
UI付きでブラウザを起動すると、スクレイパーがウェブページ上で何を実行しているかを監視してデバッグするのに便利です。ただし、これには多くのリソースが必要です。これを避けるには、ヘッドレスモードで実行するようにChromeを構成します。
from selenium.webdriver.chrome.options import Options
# ...
options = Options()
options.add_argument('--headless=new')
driver = webdriver.Chrome(
service=ChromeService(ChromeDriverManager().install()),
options=options
)
制御対象のブラウザは、UIなしでバックグラウンドで起動します。
ステップ3:ターゲットページを検査する
効果的なデータマイニング戦略を構築したいのであれば、まずターゲットのウェブページを分析する必要があります。ブラウザを開き、Yahoo株式ページにアクセスします。
欧州に拠点を置いているのであれば、最初にクッキーを受け入れるよう求めるモーダルが表示されます。
それを閉じて、目的のページにアクセスし続けるには、「すべて受け入れる」または「すべて拒否する」をクリックする必要があります。最初のボタンを右クリックし、「検査」オプションを選択すると、ブラウザのDevToolsが開きます。
ここで、次のCSSセレクタを使うと、そのボタンを選択できることがお分かりいただけるでしょう。
.consent-overlay .accept-all
以下の行を使用して、Seleniumの同意モーダルに対処します。
try:
# wait up to 3 seconds for the consent modal to show up
consent_overlay = WebDriverWait(driver, 3).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.consent-overlay')))
# click the "Accept all" button
accept_all_button = consent_overlay.find_element(By.CSS_SELECTOR, '.accept-all')
accept_all_button.click()
except TimeoutException:
print('Cookie consent overlay missing')
WebDriverWait
を使用すると、予期される条件がページ上で発生するのを待機できます。指定されたタイムアウトの間に何も起こらなければ、TimeoutException
を発生させます。クッキーオーバーレイは、出口IPが欧州の場合にのみ表示されるため、try-catch
命令で例外を扱うことができます。こうすることで、同意モーダルが存在しない場合でも、スクリプトは実行を続けます。
スクリプトを動作させるには、以下のimportを追加する必要があります。
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common import TimeoutException
DevToolsでターゲットサイトの検査を続けて、そのDOM構造に精通していきます。
ステップ4:株式データを抽出する
前のステップでお気づきのように、最も興味深い情報の一部がこのセクションにあります。
HTML価格指標要素を検査します。
CSSクラスは、Yahoo Financeで適切なセレクタを定義するのには役に立たないことに留意してください。これらはスタイリングフレームワーク向けの特殊な構文に従っているようです。代わりに、他のHTML属性に注目します。例えば、以下のCSSセレクタで株価を取得できます。
[data-symbol="TSLA"][data-field="regularMarketPrice"]
同様の手法で、価格指標からすべての株式データを抽出します。
regular_market_price = driver\
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="regularMarketPrice"]')\
.text
regular_market_change = driver\
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="regularMarketChange"]')\
.text
regular_market_change_percent = driver\
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="regularMarketChangePercent"]')\
.text\
.replace('(', '').replace(')', '')
post_market_price = driver\
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="postMarketPrice"]')\
.text
post_market_change = driver\
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="postMarketChange"]')\
.text
post_market_change_percent = driver\
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="postMarketChangePercent"]')\
.text\
.replace('(', '').replace(')', '')
特定のCSSセレクタ戦略でHTML要素を選択した後、text
フィールドでその内容を抽出できます。パーセントフィールドには丸括弧が含まれるため、replace()
で丸括弧を削除します。
それらをstock
辞書に追加して出力し、財務データのスクレイピングプロセスが期待通りに機能することを検証します。
# initialize the dictionary
stock = {}
# stock price scraping logic omitted for brevity...
# add the scraped data to the dictionary
stock['regular_market_price'] = regular_market_price
stock['regular_market_change'] = regular_market_change
stock['regular_market_change_percent'] = regular_market_change_percent
stock['post_market_price'] = post_market_price
stock['post_market_change'] = post_market_change
stock['post_market_change_percent'] = post_market_change_percent
print(stock)
スクリプトをスクレイピングしたいセキュリティで実行すると、以下のようなものが表示されるはずです。
{'regular_market_price': '193.17', 'regular_market_change': '+8.70', 'regular_market_change_percent': '+4.72%', 'post_market_price': '194.00', 'post_market_change': '+0.83', 'post_market_change_percent': '+0.43%'}
その他の有用な情報は、#quote-summary
テーブルで見つけることができます。
この場合、以下のCSSセレクタのように、data-test
属性のおかげで各データフィールドを抽出できます。
#quote-summary [data-test="PREV_CLOSE-value"]
以下を使ってすべてをスクレイピングします。
previous_close = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="PREV_CLOSE-value"]').text
open_value = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="OPEN-value"]').text
bid = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="BID-value"]').text
ask = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="ASK-value"]').text
days_range = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="DAYS_RANGE-value"]').text
week_range = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="FIFTY_TWO_WK_RANGE-value"]').text
volume = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="TD_VOLUME-value"]').text
avg_volume = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="AVERAGE_VOLUME_3MONTH-value"]').text
market_cap = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="MARKET_CAP-value"]').text
beta = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="BETA_5Y-value"]').text
pe_ratio = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="PE_RATIO-value"]').text
eps = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="EPS_RATIO-value"]').text
earnings_date = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="EARNINGS_DATE-value"]').text
dividend_yield = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="DIVIDEND_AND_YIELD-value"]').text
ex_dividend_date = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="EX_DIVIDEND_DATE-value"]').text
year_target_est = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="ONE_YEAR_TARGET_PRICE-value"]').text
その後、それらをstock
に追加します。
stock['previous_close'] = previous_close
stock['open_value'] = open_value
stock['bid'] = bid
stock['ask'] = ask
stock['days_range'] = days_range
stock['week_range'] = week_range
stock['volume'] = volume
stock['avg_volume'] = avg_volume
stock['market_cap'] = market_cap
stock['beta'] = beta
stock['pe_ratio'] = pe_ratio
stock['eps'] = eps
stock['earnings_date'] = earnings_date
stock['dividend_yield'] = dividend_yield
stock['ex_dividend_date'] = ex_dividend_date
stock['year_target_est'] = year_target_est
素晴しいです!これで、Pythonを使って財務ウェブスクレイピングを実行できました!
ステップ5:複数の株式をスクレイピングする
分散投資ポートフォリオは、複数の証券で構成されます。これらすべてのデータを取得するには、複数のティッカーをスクレイピングするようにスクリプトを拡張する必要があります。
まず、スクレイピングロジックを関数にカプセル化します。
def scrape_stock(driver, ticker_symbol):
url = f'https://finance.yahoo.com/quote/{ticker_symbol}'
driver.get(url)
# deal with the consent modal...
# initialize the stock dictionary with the
# ticker symbol
stock = { 'ticker': ticker_symbol }
# scraping the desired data and populate
# the stock dictionary...
return stock
次に、CLIのティッカー引数を反復処理して、スクレイピング関数を適用します。
if len(sys.argv) <= 1:
print('Ticker symbol CLI arguments missing!')
sys.exit(2)
# initialize a Chrome instance with the right
# configs
options = Options()
options.add_argument('--headless=new')
driver = webdriver.Chrome(
service=ChromeService(ChromeDriverManager().install()),
options=options
)
driver.set_window_size(1150, 1000)
# the array containing all scraped data
stocks = []
# scraping all market securities
for ticker_symbol in sys.argv[1:]:
stocks.append(scrape_stock(driver, ticker_symbol))
for
サイクルが終了すると、Python辞書のstocks
のリストには、すべての株式市場のデータが含まれることになります。
ステップ6:スクレイピングしたデータをCSVにエクスポートする
わずか数行のコードで、収集したデータをCSVにエクスポートできます。
import csv
# ...
# extract the name of the dictionary fields
# to use it as the header of the output CSV file
csv_header = stocks[0].keys()
# export the scraped data to CSV
with open('stocks.csv', 'w', newline='') as output_file:
dict_writer = csv.DictWriter(output_file, csv_header)
dict_writer.writeheader()
dict_writer.writerows(stocks)
このスニペットは、open()
でstocks.csv
ファイルを作成し、ヘッダ行で初期化し、それにデータを入力します。具体的にはDictWriter.writerows
()は、各辞書をCSVレコードに変換して、出力ファイルに追加します。
csv
はPython Standard Libraryから提供されているため、目的を達成するために追加の依存関係をインストールする必要はありません。
ウェブページに含まれる生データを、半構造化データにしてCSVファイルに格納できます。それでは、Yahoo Financeスクレイパー全体を見てみましょう。
ステップ7:すべてを統合する
以下に、完全なscraper.py
ファイルを示します。
from selenium import webdriver
from selenium.webdriver.chrome.service import Service as ChromeService
from webdriver_manager.chrome import ChromeDriverManager
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common import TimeoutException
import sys
import csv
def scrape_stock(driver, ticker_symbol):
# build the URL of the target page
url = f'https://finance.yahoo.com/quote/{ticker_symbol}'
# visit the target page
driver.get(url)
try:
# wait up to 3 seconds for the consent modal to show up
consent_overlay = WebDriverWait(driver, 3).until(
EC.presence_of_element_located((By.CSS_SELECTOR, '.consent-overlay')))
# click the 'Accept all' button
accept_all_button = consent_overlay.find_element(By.CSS_SELECTOR, '.accept-all')
accept_all_button.click()
except TimeoutException:
print('Cookie consent overlay missing')
# initialize the dictionary that will contain
# the data collected from the target page
stock = { 'ticker': ticker_symbol }
# scraping the stock data from the price indicators
regular_market_price = driver \
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="regularMarketPrice"]') \
.text
regular_market_change = driver \
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="regularMarketChange"]') \
.text
regular_market_change_percent = driver \
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="regularMarketChangePercent"]') \
.text \
.replace('(', '').replace(')', '')
post_market_price = driver \
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="postMarketPrice"]') \
.text
post_market_change = driver \
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="postMarketChange"]') \
.text
post_market_change_percent = driver \
.find_element(By.CSS_SELECTOR, f'[data-symbol="{ticker_symbol}"][data-field="postMarketChangePercent"]') \
.text \
.replace('(', '').replace(')', '')
stock['regular_market_price'] = regular_market_price
stock['regular_market_change'] = regular_market_change
stock['regular_market_change_percent'] = regular_market_change_percent
stock['post_market_price'] = post_market_price
stock['post_market_change'] = post_market_change
stock['post_market_change_percent'] = post_market_change_percent
# scraping the stock data from the "Summary" table
previous_close = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="PREV_CLOSE-value"]').text
open_value = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="OPEN-value"]').text
bid = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="BID-value"]').text
ask = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="ASK-value"]').text
days_range = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="DAYS_RANGE-value"]').text
week_range = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="FIFTY_TWO_WK_RANGE-value"]').text
volume = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="TD_VOLUME-value"]').text
avg_volume = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="AVERAGE_VOLUME_3MONTH-value"]').text
market_cap = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="MARKET_CAP-value"]').text
beta = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="BETA_5Y-value"]').text
pe_ratio = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="PE_RATIO-value"]').text
eps = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="EPS_RATIO-value"]').text
earnings_date = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="EARNINGS_DATE-value"]').text
dividend_yield = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="DIVIDEND_AND_YIELD-value"]').text
ex_dividend_date = driver.find_element(By.CSS_SELECTOR, '#quote-summary [data-test="EX_DIVIDEND_DATE-value"]').text
year_target_est = driver.find_element(By.CSS_SELECTOR,
'#quote-summary [data-test="ONE_YEAR_TARGET_PRICE-value"]').text
stock['previous_close'] = previous_close
stock['open_value'] = open_value
stock['bid'] = bid
stock['ask'] = ask
stock['days_range'] = days_range
stock['week_range'] = week_range
stock['volume'] = volume
stock['avg_volume'] = avg_volume
stock['market_cap'] = market_cap
stock['beta'] = beta
stock['pe_ratio'] = pe_ratio
stock['eps'] = eps
stock['earnings_date'] = earnings_date
stock['dividend_yield'] = dividend_yield
stock['ex_dividend_date'] = ex_dividend_date
stock['year_target_est'] = year_target_est
return stock
# if there are no CLI parameters
if len(sys.argv) <= 1:
print('Ticker symbol CLI argument missing!')
sys.exit(2)
options = Options()
options.add_argument('--headless=new')
# initialize a web driver instance to control a Chrome window
driver = webdriver.Chrome(
service=ChromeService(ChromeDriverManager().install()),
options=options
)
# set up the window size of the controlled browser
driver.set_window_size(1150, 1000)
# the array containing all scraped data
stocks = []
# scraping all market securities
for ticker_symbol in sys.argv[1:]:
stocks.append(scrape_stock(driver, ticker_symbol))
# close the browser and free up the resources
driver.quit()
# extract the name of the dictionary fields
# to use it as the header of the output CSV file
csv_header = stocks[0].keys()
# export the scraped data to CSV
with open('stocks.csv', 'w', newline='') as output_file:
dict_writer = csv.DictWriter(output_file, csv_header)
dict_writer.writeheader()
dict_writer.writerows(stocks)
150行未満のコードで、Yahoo Financeからデータを取得するフル機能のウェブスクレイパーを構築できました。
以下の例のように、ターゲットの株式を指定してこれを起動します。
python scraper.py TSLA AMZN AAPL META NFLX GOOG
スクレイピングプロセスの最後に、このstocks.csv
ファイルがプロジェクトのルートフォルダに表示されます。
まとめ
このチュートリアルでは、Yahoo Financeがウェブ上の最高の財務ポータルの1つである理由と、そこからデータを抽出する方法を解説しました。特に、そこから株式データを取得するPythonスクレイパーの構築方法を見てきました。ご覧いただいておわかりのように、これは複雑なものではなく、わずか数行のコードで済むものです。
同時に、Yohoo FinanceはJavaScriptに大きく依存する動的なサイトです。この種のサイトを扱う場合、HTTPライブラリとHTMLパーサーに基づく従来のアプローチでは不十分です。その上、この種の人気サイトは高度なデータ保護技術を導入する傾向があります。それらをスクレイピングするには、CAPTCHAやフィンガープリンティング、自動再試行などを自動的に処理できる制御可能なブラウザが必要です。当社の新しいScraping Browserソリューションは、まさにそのためのツールです!
ウェブスクレイピングには全く関心がないとしても、財務データには興味がありませんか?当社のデータセットマーケットプレイスをご覧ください。