DEV Community

Cover image for 금융 테이블 추출하기: 주식, ETF, 시장 데이터
circobit
circobit

Posted on

금융 테이블 추출하기: 주식, ETF, 시장 데이터

금융 웹사이트는 테이블 데이터의 보물창고입니다. 주가, ETF 보유 내역, 시장 지수, 실적 보고서—모두 HTML 테이블에 담겨 분석을 기다리고 있습니다.

하지만 그 데이터를 사용 가능한 형태로 가져오는 것이 항상 간단하지는 않습니다.

이 가이드에서는 금융 테이블의 일반적인 문제점과 깔끔하게 추출하는 실용적 해결책을 다룹니다.

금융 테이블이 까다로운 이유

금융 데이터에는 단순한 추출을 망가뜨리는 독특한 특성이 있습니다.

혼합된 숫자 형식

미국 사이트는 1,234.56을 표시합니다. 유럽 사이트는 1.234,56을 표시합니다. 일부 금융 포털은 데이터 소스에 따라 두 형식을 혼용합니다.

Excel에 복사-붙여넣기하면 이것들이 뒤엉킵니다. 천 단위가 소수점이 됩니다. 날짜가 숫자가 됩니다. 혼돈입니다.

실시간 업데이트

많은 금융 테이블이 동적으로 업데이트됩니다. 페이지 로드 후 DOM이 변경됩니다. 너무 일찍 스크래핑하면 오래된 데이터나 빈 셀을 얻습니다.

중첩 구조

보유 내역 테이블에는 확장 가능한 행이 자주 있습니다. 펀드의 상위 보유 내역이 10개 행을 보여주고, "50개 모두 보기" 버튼 뒤에 나머지가 숨어있습니다. 숨겨진 데이터는 페이지에 존재하지만 보이지 않습니다.

퍼센트 및 통화 기호

+2.34%$1,234는 사람 눈에는 괜찮습니다. 스프레드시트에서는 정렬이나 계산이 제대로 작동하지 않는 텍스트 문자열입니다.

일반적인 금융 데이터 소스

Yahoo Finance

주가, 과거 데이터, 포트폴리오 보유 내역. 테이블이 비교적 깔끔하지만 동적으로 업데이트됩니다.

팁: 추출 전에 페이지가 완전히 로드될 때까지 기다리세요. 초기 렌더링에서 로딩 플레이스홀더가 표시될 수 있습니다.

Google Finance

테이블이 최소화되어 있고, 주로 카드와 차트입니다. 대량 추출에는 덜 유용합니다.

자세한 안내는 Google Finance 테이블을 Excel로 내보내기 가이드를 참고하세요.

Morningstar

펀드 보유 내역, 성과 데이터, 섹터 분류. 테이블이 잘 구성되어 있지만 종종 페이지네이션이 적용됩니다.

팁: "모두 보기" 또는 페이지네이션 컨트롤을 찾으세요. 첫 페이지에 상위 10개 보유 내역만 표시될 수 있습니다.

SEC EDGAR

제출 서류에 테이블이 포함되어 있지만 복잡한 문서에 매립되어 있습니다. 10-K와 10-Q 보고서에 재무제표가 HTML 테이블로 있습니다.

팁: 테이블은 거기 있지만 법적 텍스트로 둘러싸여 있습니다. 추출 전에 필요한 특정 테이블을 식별하세요.

MarketWatch, Investing.com, Reuters

뉴스 중심이지만 시세, 실적, 경제 캘린더에 대한 데이터 테이블을 포함합니다.

추출 전략

전략 1: 직접 내보내기

가장 단순한 접근법—데이터가 한 번만 필요할 때.

HTML Table Exporter 같은 도구가 페이지의 테이블을 감지하고 CSV 또는 Excel로 직접 내보냅니다. 코드 불필요.

금융 데이터에 특화된 사항:

  • 숫자 형식을 정규화하는 정제 프리셋 사용
  • 추가 처리가 필요하면 CSV, 최종 목적지라면 Excel로 내보내기
  • 내보내기 전 동적 콘텐츠가 로드되었는지 확인

전략 2: Python + Pandas

반복 추출이나 파이프라인 통합용.

import pandas as pd

# 기본 추출
tables = pd.read_html('https://example.com/stock-data')
df = tables[0]  # 페이지의 첫 번째 테이블

# 헤더 지정
df = pd.read_html(url, header=0)[0]

# 인코딩 처리
df = pd.read_html(url, encoding='utf-8')[0]
Enter fullscreen mode Exit fullscreen mode

한계: read_html은 JavaScript를 실행하지 않습니다. 동적 테이블은 로드되지 않습니다.

전략 3: 동적 콘텐츠를 위한 Selenium

JavaScript로 로드되는 테이블:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import pandas as pd

driver = webdriver.Chrome()
driver.get('https://example.com/stock-data')

# 테이블 로드 대기
WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.TAG_NAME, "table"))
)

# 추출
html = driver.page_source
tables = pd.read_html(html)
Enter fullscreen mode Exit fullscreen mode

트레이드오프: 설정이 더 필요하지만 JavaScript 렌더링 콘텐츠를 처리합니다.

금융 데이터 정제

원시 내보내기는 보통 정리가 필요합니다.

통화 기호 제거

df['Price'] = df['Price'].replace('[\$,]', '', regex=True).astype(float)
Enter fullscreen mode Exit fullscreen mode

퍼센트 처리

df['Change'] = df['Change'].str.rstrip('%').astype(float) / 100
Enter fullscreen mode Exit fullscreen mode

숫자 형식 정규화

유럽식 (1.234,56 → 1234.56):

df['Value'] = df['Value'].str.replace('.', '', regex=False)
df['Value'] = df['Value'].str.replace(',', '.', regex=False).astype(float)
Enter fullscreen mode Exit fullscreen mode

날짜 파싱

금융 사이트는 일관성 없는 날짜 형식을 사용합니다.

df['Date'] = pd.to_datetime(df['Date'], format='mixed')
Enter fullscreen mode Exit fullscreen mode

실용 예시: ETF 보유 내역

펀드의 보유 내역을 분석용으로 가져오려고 합니다.

수동 방법:

  1. 펀드 페이지 방문
  2. 보유 내역 테이블 찾기
  3. Excel에 복사-붙여넣기
  4. 서식 수정에 20분 투자

효율적 방법:

  1. 보유 내역 테이블로 이동
  2. 숫자 정규화와 함께 직접 Excel로 내보내기
  3. 완료

이 차이는 누적됩니다. 매월 여러 펀드를 추적한다면 자동화가 수 시간을 절약합니다.

주의할 엣지 케이스

탭으로 분할된 테이블

일부 사이트는 다른 데이터(보유 내역, 성과, 리스크)를 탭에 표시하며 각 탭이 다른 테이블을 로드합니다. 각 탭이 별도의 추출입니다.

각주와 주석

금융 테이블은 별표와 단검 기호를 좋아합니다. 1,234*는 "추정치"를 의미할 수 있지만 숫자 파싱을 깨뜨립니다.

해결: 변환 전에 비숫자 접미사를 제거.

반복되는 헤더 행

긴 테이블은 가독성을 위해 중간에 헤더를 반복하기도 합니다. 추출 결과에 중복 헤더 행이 데이터로 포함될 수 있습니다.

해결: 모든 값이 헤더와 일치하는 행을 필터링.

자동화 vs 수동 내보내기의 기준

수동 내보내기가 적합할 때:

  • 일회성 분석
  • 비정기적 스케줄
  • 매번 다른 테이블

자동화가 적합할 때:

  • 일일/주간 반복 수집
  • 같은 테이블, 같은 구조
  • 더 큰 파이프라인에 통합

비정기 리서치를 하는 대부분의 분석가에게는 좋은 도구를 사용한 수동 내보내기가 스크립트를 빌드하고 유지하는 것보다 빠릅니다.

요약

금융 테이블은 가치 있지만 지저분합니다. 핵심 과제는 숫자 형식, 동적 로딩, 일관성 없는 구조입니다.

빠른 추출에는 브라우저 기반 도구가 대부분의 경우를 처리합니다. 파이프라인에는 적절한 대기와 정제를 갖춘 Python이 나머지를 처리합니다.

목표는 완벽한 자동화가 아니라—최소한의 마찰로 깨끗한 데이터를 얻는 것입니다.


금융 테이블을 빠르게 내보내야 하나요? gauchogrid.com/ko/html-table-exporter에서 자세히 알아보거나 Chrome 웹 스토어에서 HTML Table Exporter를 무료로 사용해보세요.

Top comments (0)