Python を使用して財務データをスクレイピングする方法を学ぶ

公開: 2019-04-26
目次を見る
Yahoo Finance からデータをクロールする理由
Python を使用して財務データを Web スクレイプする方法は?
1. Python でスクレイピングするためのコードから始めます
2.クローラーコードの説明
3. キャプチャしたいくつかの重要なデータ ポイント
Yahoo Finance からクロールできるデータは何ですか?
クロールできるその他の財務データは?
ヤフーファイナンスデータ活用事例
Web データの抽出についてサポートが必要ですか?

株式市場は、毎秒更新される何百万ものエントリを持つ巨大なデータベースです。 企業の財務データを提供する企業は数多くありますが、通常は API (アプリケーション プログラミング インターフェイス) を介して提供されます。 ご想像のとおり、これらの API は無料ではありません。 Yahoo Finance は信頼できる株式市場データのソースであり、有料の API があります。 Python を使用して Yahoo Finance のデータをスクレイピングする方法について、順を追って説明します。

Yahoo Finance からデータをクロールする理由

信頼できるソースから無料でクリーンな財務データが必要な場合は、Yahoo Finance が最適です。 会社概要の Web ページは統一された構造で構築されているため、Web スクレイピング Python が簡単になります。 Microsoft の財務ページからデータをクロールするスクリプトを作成した場合、同じスクリプトを使用して Apple の財務ページからデータをクロールすることもできます。

Python を使用して財務データを Web スクレイプする方法は?

インストールと開始については、主要なホテル予約ポータルからデータをクロールする方法について説明したデータ スクレイピング python に関するこの記事の基本的な手順を参照できます。 コード エディター Atom と共にすべての依存関係をインストールしたら、Python を使用して Yahoo Finance をスクレイピングすることから始めましょう。

1. Python でスクレイピングするためのコードから始めます

インストールとセットアップの段階が完了したら、すぐにコードに入り、Yahoo Finance Scraping を開始できます。 コードはさらに下に示され、Python コマンドだけを使用して実行できます。

ヤフー金融データのスクレイピング方法

上記の方法でコードを実行できます。 プロンプトが表示されたら、財務概要を確認したい会社の URL を入力するだけです。 Microsoft のリンクを使用しました。

[コード言語=”パイソン”]
#!/usr/bin/python
# -*- コーディング: utf-8 -*-
urllib.request をインポート
urllib.parse をインポートする
urllib.error をインポート
from bs4 import BeautifulSoup
SSL のインポート
json をインポート
インポートアスト
OS のインポート
from urllib.request import リクエスト、urlopen

# SSL 証明書エラーを無視する場合
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

# ユーザーからの入力
url = input('Yahoo ファイナンス会社の URL を入力してください-')
# Mozilla ブラウザを使用してアクセスしていると Web サイトに信じ込ませる
req = Request(url, headers={'User-Agent': 'Mozilla/5.0'})
ウェブページ = urlopen(req).read()
# データを簡単に抽出するために、HTML ページの BeautifulSoup オブジェクトを作成します。

スープ = BeautifulSoup(ウェブページ, 'html.parser')
html = スープ.prettify('utf-8')
company_json = {}
その他の詳細 = {}
スパンの場合はsoup.findAll('span',
attrs={'class': 'Trsdu(0.3s) Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(b)'
}):
company_json['PRESENT_VALUE'] = span.text.strip()
soup.findAll('div', attrs={'class': 'D(ib) Va(t)'}) の div の場合:
for span in div.findAll('span', recursive=False):
company_json['PRESENT_GROWTH'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'PREV_CLOSE-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['PREV_CLOSE'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'OPEN-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['OPEN'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'BID-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['BID'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'ASK-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['ASK'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'DAYS_RANGE-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['DAYS_RANGE'] = span.text.strip()
soup.findAll('td',
attrs={'data-test': 'FIFTY_TWO_WK_RANGE-value'}):
for span in td.findAll('span', recursive=False):
other_details['FIFTY_TWO_WK_RANGE'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'TD_VOLUME-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['TD_VOLUME'] = span.text.strip()
soup.findAll('td',
attrs={'data-test': 'AVERAGE_VOLUME_3MONTH-値'
}):
for span in td.findAll('span', recursive=False):
other_details['AVERAGE_VOLUME_3MONTH'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'MARKET_CAP-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['MARKET_CAP'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'BETA_3Y-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['BETA_3Y'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'PE_RATIO-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['PE_RATIO'] = span.text.strip()
soup.findAll('td', attrs={'data-test': 'EPS_RATIO-value'}) の td の場合:
for span in td.findAll('span', recursive=False):
other_details['EPS_RATIO'] = span.text.strip()
for td insoup.findAll('td', attrs={'data-test': 'EARNINGS_DATE-value'
}):
other_details['EARNINGS_DATE'] = []
for span in td.findAll('span', recursive=False):
other_details['EARNINGS_DATE'].append(span.text.strip())
soup.findAll('td',
attrs={'data-test': 'DIVIDEND_AND_YIELD-value'}):
other_details['DIVIDEND_AND_YIELD'] = td.text.strip()
soup.findAll('td',
attrs={'data-test': 'EX_DIVIDEND_DATE-value'}):
for span in td.findAll('span', recursive=False):
other_details['EX_DIVIDEND_DATE'] = span.text.strip()
soup.findAll('td',
attrs={'data-test': 'ONE_YEAR_TARGET_PRICE-値'
}):
for span in td.findAll('span', recursive=False):
other_details['ONE_YEAR_TARGET_PRICE'] = span.text.strip()
company_json['OTHER_DETAILS'] = other_details
出力ファイルとして open('data.json', 'w') を使用:
json.dump(company_json, outfile, indent=4)
会社のjsonを出力
open('output_file.html', 'wb') をファイルとして使用:
ファイル.書き込み(html)
print '————-データの抽出が完了しました。 jsonファイルを確認してください。 ———-'

[/コード]

コードを実行して会社の URL を入力すると、json が端末に表示されます。 この json は、フォルダー内の「data.json」という名前のファイルにも保存されます。 Microsoft の場合、次の JSON を取得しました。

[コード言語=”パイソン”]
{
“PRESENT_GROWTH”: “+1.31 (+0.67%)”,
“現在値”: “197.00”,
“PREV_CLOSE”: “195.69”,
「OPEN」:「196.45」、
「入札」:「196.89×900」、
「お願い」:「197.00×1400」、
“TD_VOLUME”: “18,526,644”,
“AVERAGE_VOLUME_3MONTH”: “29,962,082”,
“MARKET_CAP”: “928.91B”,
「BETA_3Y」:「0.91」、
“PE_RATIO”: “16.25”,
“EPS_RATIO”: “12.12”,
"EARNINGS_DATE": [
「2019年4月30日」
]、
“DIVIDEND_AND_YIELD”: “2.92 (1.50%)”,
“EX_DIVIDEND_DATE”: “2019-02-08”,
「ONE_YEAR_TARGET_PRICE」: 「190.94」
}
[/コード]

最近、複数の損失を出している Apple の場合、JSON は次のようになりました。

[コード言語=”パイソン”]

{
“現在値”: “198.87”,
“PRESENT_GROWTH”: “-0.08 (-0.04%)”,
"その他の詳細": {
“PREV_CLOSE”: “198.95”,
「OPEN」:「199.20」、
「入札」:「198.91×800」、
「お願い」:「198.99×1000」、
“TD_VOLUME”: “27,760,668”,
“AVERAGE_VOLUME_3MONTH”: “28,641,896”,
“MARKET_CAP”: “937.728B”,
「BETA_3Y」:「0.91」、
“PE_RATIO”: “16.41”,
“EPS_RATIO”: “12.12”,
"EARNINGS_DATE": [
“2019 年 4 月 30 日”
]、
“DIVIDEND_AND_YIELD”: “2.92 (1.50%)”,
“EX_DIVIDEND_DATE”: “2019-02-08”,
「ONE_YEAR_TARGET_PRICE」: 「193.12」
}
}

[/コード]

必要な数の会社で同じことを行うことができ、更新を維持したい頻度で行うことができます.

2.クローラーコードの説明

以前の Web スクレイピング コードと同様に、このコードでも最初に HTML ファイル全体を取得しました。 そこから、必要なデータを含む特定のタグ (特定のクラスを持つ) を特定しました。 この手順は、1 つの会社の詳細ページに対して手動で行われました。 特定のタグとそれぞれのクラスが特定されたら、美しいスープを使用して、コードを使用してそれらのタグを取り出しました。

次に、これらの各タグから、必要なデータを company_json という変数にコピーしました。 これは、最終的に data.json という JSON タイプのファイルに書き込んだ json です。 スクレイピングした HTML を、ローカル メモリ内の output_file.html というファイルに保存したこともわかります。 これは、HTML ページを自分で分析し、より多くのデータをクロールするための他のデータ スクレイピング Python 手法を考え出すことができるようにするためです。

3. キャプチャしたいくつかの重要なデータ ポイント

  • PREV_CLOSE:取引前日の株式の終値を指します。 株式の前日の値は、株式市場が開いていた (休日ではない) 日の最終終値のみを指します。
  • OPEN:始値とも呼ばれる始値は、取引日の株式の開始価格です。 たとえば、ニューヨーク証券取引所 (NYSE) の株式市場の始値は、東部時間の午前 9 時 30 分での価格になります。
  • BID & ASK:どちらの価格も、株式の 1 株の相場です。 入札は、買い手がそれに対して支払っても構わないと思っている価格を指しますが、売り手は、売り手が喜んでそれを販売する価格です。 乗数は、それぞれの価格で取引が保留されている株式の数を指します。
  • TD_VOLUME: 1 日に取引された株式の数です。
  • PE_RATIO:おそらく投資家が調べる最も重要な要素で、企業の株式の現在の市場価格を企業の 1 株あたりの利益で割って計算されます。 簡単に言えば、それは会社の利益の各ルピー価値に対して支払う準備ができている金額です.

重要なデータ ポイントのいくつかを説明した理由は、Yahoo Finance ページからデータをスクレイピングするだけで、会社の財務をどれだけ深く掘り下げることができるかを知ってもらいたかったからです。

Yahoo Finance からクロールできるデータは何ですか?

この Python スクレーパーを使用して、さまざまなデータ ポイントをクロールできます。 現在の価値と現在の成長率または下落率が最も重要です。 他のデータポイントを一緒に見ると、より良い全体像が示され、会社の株式への投資が良いアイデアかどうかを判断するのに役立ちます. ただし、データのスナップショットを見るだけではあまり効果的ではないかもしれません。 定期的にデータをスクレイピングし、大きなデータセットを使用して将来の株価を予測することは、長期的にはより有用であることが証明される可能性があります.

クロールできるその他の財務データは?

スクレイピングした財務データは、Yahoo Finance の会社の概要ページからのものです。 各企業には、最大 5 年間の株価データを表示できるチャート ページもあります。 データは正確に構造化されているわけではありませんが、クロールできると、企業の株式の過去のパフォーマンスに関する非常に優れた洞察が得られる可能性があります。

統計ページには、キャプチャしたものに加えて、30 を超えるさまざまなデータ ポイントが表示されます。 これらは構造化された形式であり、提供されたものと同様のコードを使用してスクレイピングできます。

履歴データにはチャート ページのデータが含まれていますが、CSV に似た形式になっています。データを簡単に抽出して CSV に保存できます。 プロファイル、財務、分析、オプション、所有者、持続可能性などの他のページでは、競合他社と比較して会社の株式がどのように機能するかを適切に推定できます。

ヤフーファイナンスデータ活用事例

履歴データを使用して株価を予測したり、スクレイピング エンジンから定期的に更新されるデータを使用してユーザーに最新情報を提供するアプリケーションを作成したりできます。 いつ株を売るべきか、いつもっと買うべきかを提案できます - 可能性は無限大です!

チームが小さく、Web スクレイピングを開始する方法を決定できない場合は、PromptCloud のような献身的で経験豊富な Web スクレイピング チームの助けを借りることができます。 当社の Web スクレイピング要件収集ダッシュボードにより、要件の提出、見積もりの​​取得、そして最終的にプラグ アンド プレイ形式でのデータの取得がシンプルで簡単なプロセスになります。


Web データの抽出についてサポートが必要ですか?

当社の Web スクレイピング サービスを使用して、ビジネス アプリケーション用の Web サイトからクリーンですぐに使用できるデータを取得します。

おっとっと! フォームが見つかりませんでした。

免責事項:このチュートリアルで提供されるコードは、学習のみを目的としています。 私たちは、それがどのように使用されるかについて責任を負わず、ソース コードのいかなる有害な使用についても責任を負いません。