こんにちは!今回は、米国の証券取引委員会(SEC)の財務資料をPythonを使って自動的にスクレイピングする方法をご紹介します。スクレイピングについてはほかの記事も書いていますのでそちらも参考にしてみてください。
目次
- SECとは何か
- SECに提出を義務付けられている書類
- 10-Q と 10-Kの違い
- 10-Kに含まれる内容
- SECからスクレイピングする際の注意事項
- 実際のコードの紹介
SECとは何か
SEC(証券取引委員会)は、米国内での証券および金融市場の整合性を保つために設立された連邦政府機関です。投資家を保護し、公正かつ効率的な市場を促進することを使命としています。
SECに提出を義務付けられている書類
SECには、企業が公開するさまざまな財務文書や報告書の提出が義務付けられています。これには年次報告書(10-K)、四半期報告書(10-Q)、特定の取引に関連する書類(8-K)などが含まれます。
10-Q と 10-Kの違い
一般的に決算資料として重要なのは、年次報告書(10-K)と四半期報告書(10-Q)です。10-Qは四半期ごとに提出される財務報告書で、最近の業績や財務状態についての概観を提供します。一方、10-Kは年次報告書であり、より詳細な情報を含み、企業の財務状況、運営結果、リスク要因などについての全体像を提供します。さらに大きな違いとして10-Qは自社で作成するのに対して、10-Kは第三者が作成する必要があるという点です。
10-Kに含まれる内容
10-K報告書には、企業の財務状態、運営結果、キャッシュフロー、財務諸表、会社の経営に関する議論と分析(MD&A)、リスク要因などが含まれます。これらの情報は、投資家がその企業を評価する上で重要な役割を果たします。
SECのウェブサイトからデータをスクレイピングする際は、いくつかの重要なルールを守る必要があります。
- Agentの設定:自分のスクレイパーが何であるかを識別するために、適切なユーザーエージェントを設定してください。
- リクエストの制限:一秒間に10回以上のリクエストを送信してはならないというルールがあります。これは、サーバーに過度の負荷をかけないための措置です。
実際のコードの紹介
さて、具体的なコードの話に移りましょう。私はすでにPythonを使ったSECのウェブサイトからのスクレイピングのコードをいくつか準備しています。ここでは、その一部を紹介します。
ここで紹介するコードでは、requestsとBeautifulSoupを使って、特定の企業の10-Kファイルをダウンロードし、解析する方法を説明しています。スクレイピングする前に、上記の注意事項を十分に理解し、遵守するようにしてください。
import requests
import time
import os
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
def download_company_facts(cik_list, output_dir="company_facts"):
"""
指定されたCIKのリストに基づいてSECのAPIから企業のファクトデータをダウンロードする。
:param cik_list: ダウンロードする企業のCIKのリスト
:param output_dir: ダウンロードしたファイルを保存するディレクトリ
"""
if not os.path.exists(output_dir):
os.makedirs(output_dir)
########################################################################################################
# User-Agentヘッダーを設定(SECの要求に従い適切なUser Agentを設定してください)
headers = {
'User-Agent': '############'
}
########################################################################################################
for cik in cik_list:
try:
response = requests.get(url, headers=headers)
response.raise_for_status() # ステータスコードが200以外の場合はエラーを発生させる
output_path = os.path.join(output_dir, f"CIK{cik}_facts.json")
with open(output_path, 'w') as file:
file.write(response.text)
print(f"Downloaded facts for CIK: {cik}")
except requests.HTTPError as e:
print(f"Failed to download data for CIK {cik}: {e}")
time.sleep(0.1)
print("All downloads completed.")
cik_list = ["0001840856", "0001067983", "0000320193"] # 企業のCIKの例
download_company_facts(cik_list)
このように対象の企業のJsonファイルをダウンロードすることができましたね!
今回はここまでです。この記事が、SECから財務資料をスクレイピングする際の一助となれば幸いです。次回も、金融技術に関する興味深い話題を取り上げていきますので、お楽しみに!
またコードへのリンクは以下の通りです。好きな企業の財務資料をみなさんもダウンロードしてみてくださいね!
colab.research.google.com
参考サイト:
www.sec.gov
www.sec.gov