株式クォント投資のためのDART電子公示システムスクレイピング方法

目次

  • 1. 必要なライブラリのインストール
  • 2. DART公示検索および財務諸表スクレイピングの例
  • 3. コードの説明
この投稿は、クパンパートナーズの活動の一環として、一定額の手数料を受け取ります。

株式クォント投資のためのDART電子公示システムスクレイピング方法

KissCuseMe
2025-03-11
3

DART電子公示システムから財務諸表データをスクレイピングする方法を段階的に説明します。Pythonのrequests、BeautifulSoup、pandasライブラリを使用します。ただし、実際の使用時にはウェブサイトの構造変更に注意し、過度なリクエストはサーバーに負荷をかける可能性があるため、注意が必要です。


1. 必要なライブラリのインストール

pip install requests beautifulsoup4 pandas openpyxl

2. DART公示検索および財務諸表スクレイピングの例

import requests
from bs4 import BeautifulSoup
import pandas as pd
from urllib.parse import urljoin

<br/>

# Search Criteria (e.g., Samsung Electronics (005930) Annual Report)
COMPANY_CODE = "005930"  # Stock Code
START_DATE = "20230101"  # Search Start Date (YYYYMMDD)
END_DATE = "20231231"    # Search End Date (YYYYMMDD)
REPORT_TYPE = "A001"     # A001: Annual Report, A002: Semi-Annual Report, A003: Quarterly Report

<br/>

# DART Disclosure Search URL
SEARCH_URL = "http://dart.fss.or.kr/dsab001/search.ax"

def get_report_list():
    """Function to fetch the list of DART disclosure reports"""
    params = {
        "currentPage": 1,
        "maxResults": 10,
        "businessCode": COMPANY_CODE,
        "startDate": START_DATE,
        "endDate": END_DATE,
        "reportName": REPORT_TYPE
    }
    response = requests.get(SEARCH_URL, params=params)
    soup = BeautifulSoup(response.text, 'html.parser')
    return soup.select(".table_list tr")[1:]  # Extract rows excluding the header

def extract_excel_url(report_url):
    """Function to extract the Excel file URL from the report page"""
    response = requests.get(report_url)
    soup = BeautifulSoup(response.text, 'html.parser')
    excel_link = soup.select_one("a[href*='download.xbrl']")
    if excel_link:
        return urljoin(report_url, excel_link['href'])
    return None

def download_excel(url):
    """Function to download the Excel file and convert it into a DataFrame"""
    response = requests.get(url)
    with open("temp.xlsx", "wb") as f:
        f.write(response.content)
    return pd.read_excel("temp.xlsx", engine='openpyxl')

<br/>

# Main Execution
if __name__ == "__main__":
    reports = get_report_list()
    for idx, report in enumerate(reports[:3]):  # Process up to 3 reports
        # Extract report title and link
        title = report.select_one("td:nth-child(3) a").text.strip()
        report_url = urljoin(SEARCH_URL, report.select_one("td:nth-child(3) a")['href'])
        
        print(f"[{idx+1}] Extracting data from {title}...")
        
        # Extract Excel file URL and download
        excel_url = extract_excel_url(report_url)
        if excel_url:
            df = download_excel(excel_url)
            print(df.head())  # Check the data
        else:
            print("Excel file not found.")

3. コードの説明

  • 検索条件の設定 :
    • COMPANY_CODE: 銘柄コード(例:サムスン電子=005930)
    • REPORT_TYPE: A001(年間), A002(半期), A003(四半期)
    • 日付範囲はSTART_DATEとEND_DATEで制限します。
  • 報告書リストのスクレイピング :
    • DART公示検索APIを呼び出して報告書リストを取得します。
    • BeautifulSoupでHTMLパース後、報告書のタイトルとリンクを抽出します。
  • Excelファイルの抽出 :
    • 各報告書ページからXBRL形式のExcelファイルのリンクを探してダウンロードします。
    • pandasでExcelファイルを読み込み、DataFrameに変換します。
  • 注意事項
    • 動的コンテンツの処理 : 一部のページはJavaScriptで動的にロードされる場合があります。この場合、Seleniumを使用する必要があるかもしれません。
    • データ整合性 : 会社ごとにExcelファイルの構造が異なる可能性があるため、カラムマッピングロジックを追加する必要があります。
    • 法的制限 : ウェブスクレイピング時にはDART利用規約を遵守する必要があります。

このコードを基に追加的なデータ前処理およびクォント分析ロジックを実装することができます。

株式
クオンツ
投資
クローリング
ダート

0


利用規約個人情報取扱方針サポート
© 2025
もっと早く知っていればよかった
All rights reserved.