금융 데이터 수집 방법

파이썬을 사용하여 재무 데이터를 수동으로 수집하거나, 구조화된 출력을 위한 API로 프로세스를 자동화하는 방법을 익히십시오.
3 분 읽기
How to Scrape Financial Data blog image

이 글에서는 재무 데이터를 수동으로 수집하는 방법과 Bright Data 재무 데이터 스크레이퍼 API를 활용해 이 과정을 자동화하는 방법을 배울 수 있습니다.

스크래핑 대상과 데이터 구조 파악하기

금융 데이터는 광범위하고 종종 복잡한 정보 범위를 포함합니다. 스크래핑을 시작하기 전에 필요한 데이터 유형을 명확히 파악해야 합니다.

예를 들어, 특정 주식의 최신 가격, 당일 시가 및 종가, 당일 최고가와 최저가, 시간 경과에 따른 가격 변동 등을 보여주는 주가를 스크래핑할 수 있습니다. 회사의 손익 계산서, 대차 대조표(자산과 부채를 요약), 현금 흐름표(자금 유입 및 유출 추적)와 같은 재무 세부 정보도 성과를 평가하는 데 필요합니다. 재무 비율, 애널리스트 평가 및 보고서는 매수 및 매도 결정을 안내할 수 있으며, 새로운 업데이트와 소셜 미디어 감성 분석은 시장 동향에 대한 추가적인 통찰력을 제공합니다.

웹 페이지의 데이터 구성 방식을 이해하면 필요한 정보를 더 쉽게 찾고 스크래핑할 수 있습니다.

웹사이트를 스크래핑하기 전에 반드시 해당 사이트의 이용 약관을 검토하십시오. 많은 웹사이트는 사전 동의나 승인 없이 스크래핑하는 것을 금지합니다.

또한 사이트의 어느 부분에 접근할 수 있는지 보여주는 robots.txt 파일의 규칙을 준수해야 합니다. 추가로, 요청으로 서버에 과부하를 주지 않도록 하고 요청 사이에 지연을 구현하세요. 이는 웹사이트 자원을 보호하고 문제를 방지하는 데 도움이 됩니다.

브라우저 개발자 도구 사용

웹 페이지의 HTML 요소를 확인하려면 브라우저의 개발자 도구를 사용할 수 있습니다. 이 도구는 Chrome, Safari, Edge를 포함한 대부분의 최신 브라우저에 내장되어 있습니다. 개발자 도구를 열려면 Windows에서는 Ctrl + Shift + I, Mac에서는 Cmd + Option + I를 누르거나, 페이지에서 마우스 오른쪽 버튼을 클릭하고 ‘검사’를 선택하세요.

열린 후에는 페이지의 HTML 구조를 검사하고 특정 데이터 요소를 식별할 수 있습니다. ‘요소’ 탭은 문서 객체 모델(DOM) 트리를 표시하여 페이지에서 요소를 찾아 강조 표시할 수 있게 합니다. ‘네트워크’ 탭은 모든 네트워크 요청을 보여주며, API 엔드포인트나 동적으로 로드되는 데이터를 찾는 데 유용합니다. ‘콘솔’ 탭에서는 JavaScript 명령을 실행하고 페이지 스크립트와 상호작용할 수 있습니다.

이 튜토리얼에서는 야후 파이낸스에서 APPL 주식을 스크래핑합니다. 관련 HTML 태그를 찾으려면 APPL 주식 페이지로 이동한 후 페이지에 표시된 가격을 마우스 오른쪽 버튼으로 클릭하고 ‘검사’를 선택하세요. ‘요소’ 탭에서 가격을 포함하는 HTML 요소가 강조 표시됩니다:

Yahoo Finance Inspect Element

스크래퍼에서 이 요소를 찾기 쉽게 하기 위해 태그 이름과 class 또는 id 같은 고유 속성을 기록해 두세요.

환경 및 프로젝트 설정 방법

이 튜토리얼은 단순성과 사용 가능한 라이브러리 덕분에 웹 스크래핑에 [Python]((https://www.python.or)을 사용합니다. 시작하기 전에 시스템에 Python 3.10 이상이 설치되어 있는지 확인하세요.

Python 설치 후 터미널 또는 셸을 열고 다음 명령어를 실행하여 디렉터리와 가상 환경을 생성하세요:

mkdir scrape-financial-data 
cd scrape-financial-data 
python3 -m venv myenv

가상 환경이 생성된 후에는 활성화해야 합니다. 활성화 명령어는 운영 체제에 따라 다릅니다.

Windows 사용자의 경우 다음 명령어를 실행하세요:

.myenvScriptsactivate

macOS/Linux 사용자의 경우 다음 명령어를 실행하세요:

source myenv/bin/activate

가상 환경을 활성화한 후 pip를 사용하여 필요한 라이브러리를 설치하세요:

pip3 install requests beautifulsoup4 lxml

이 명령어는 HTTP 요청 처리를 위한 Requests 라이브러리, HTML 콘텐츠 파싱을 위한 Beautiful Soup, 효율적인 XML 및 HTML 파싱을 위한 lxml을 설치합니다.

금융 데이터 수동 스크래핑 방법

금융 데이터를 수동으로 스크래핑하려면 manual_scraping.py라는 파일을 생성하고 필요한 라이브러리를 임포트하는 다음 코드를 추가하세요:

import requests
from bs4 import BeautifulSoup

스크래핑할 금융 데이터의 URL을 설정합니다. 앞서 언급한 바와 같이, 이 튜토리얼에서는 애플 주식(AAPL)의 Yahoo Finance 페이지를 사용합니다:

url = 'https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch'

URL을 설정한 후 해당 URL로 GET 요청을 전송합니다:

headers = {'User-Agent': 'Mozilla/5.0'}
response = requests.get(url, headers=headers)

이 코드에는 브라우저 요청을 모방하기 위한 User-Agent 헤더가 포함되어 있어 대상 웹사이트에 의해 차단되는 것을 방지하는 데 도움이 됩니다.

요청이 성공했는지 확인합니다:

if response.status_code == 200:
    print('웹 페이지 성공적으로 가져옴')
else:
    print(f'웹 페이지 가져오기 실패. 상태 코드: {response.status_code}')
    exit()

그런 다음 lxml 파서를 사용하여 웹 페이지 콘텐츠를 파싱합니다:

soup = BeautifulSoup(response.content, 'lxml')

고유 속성을 기반으로 요소를 찾고, 텍스트 콘텐츠를 추출한 후 추출된 데이터를 출력합니다:

# 특정 회사 정보 추출
try:
    # 특정 회사 정보 추출
    previous_close = soup.find('fin-streamer', {'data-field': 'regularMarketPreviousClose'}).text.strip()
    open_price = soup.find('fin-streamer', {'data-field': 'regularMarketOpen'}).text.strip()
    day_range = soup.find('fin-streamer', {'data-field': 'regularMarketDayRange'}).text.strip()
    week_52_range = soup.find('fin-streamer', {'data-field': 'fiftyTwoWeekRange'}).text.strip()
    market_cap = soup.find('fin-streamer', {'data-field': 'marketCap'}).text.strip()
    # 추출 PE 비율 (TTM)
    pe_label = soup.find('span', class_='label', title='PE Ratio (TTM)')
    pe_value = pe_label.find_next_sibling('span').find('fin-streamer').text.strip()

    # EPS (TTM) 추출
    eps_label = soup.find('span', class_='label', title='EPS (TTM)')
    eps_value = eps_label.find_next_sibling('span').find('fin-streamer').text.strip()

    # 추출된 세부 정보 출력
    print("n### 주가 ###")
    print(f"시초가: {open_price}")
    print(f"전일 종가: {previous_close}")
    print(f"일중 변동폭: {day_range}")
    print(f"52주 변동폭: {week_52_range}")
    print("n### 기업 정보 ###")
    print(f"시가총액: {market_cap}")
    print(f"주가수익비율(최근 12개월 기준): {pe_value}")
    print(f"주당순이익(최근 12개월 기준): {eps_value}")

except AttributeError as e:
    print("데이터 스크래핑 중 오류 발생. 일부 필드가 존재하지 않을 수 있습니다.")
    print(e)

코드 실행 및 테스트

테스트를 위해 터미널 또는 셸을 열고 다음 명령어를 실행하세요:

python3 manual_scraping.py

출력 결과는 다음과 같아야 합니다:

웹페이지 성공적으로 가져옴

### 주가 정보 ###
시초가: 225.20
전일 종가: 225.00
일중 변동폭: 225.18 - 229.74
52주 변동폭: 164.08 - 237.49

### 기업 정보 ###
시가총액: 3.447조
주가수익비율(최근 12개월): 37.50
주당순이익(최근 12개월): 37.50

수동 스크래핑으로 발생하는 문제 해결

수동 데이터 스크래핑은 다양한 이유로 어려울 수 있습니다. CAPTCHA나 IP 차단과 같은 문제를 우회하기 위한 전략이 필요하며, 구조화되지 않거나 불규칙한 데이터는 파싱 오류를 유발할 수 있습니다. 또한 적절한 권한 없이 스크래핑할 경우 법적 문제가 발생할 수 있습니다. 웹사이트의 빈번한 업데이트는 스크래퍼를 작동 불능 상태로 만들 수 있어, 지속적인 기능을 보장하기 위해 정기적인 코드 유지보수가 필요합니다.

스크레이퍼를 구축하고 자동화하려면 데이터 분석에 집중하기보다 코드 작성과 수정 작업에 많은 시간을 투자해야 합니다. 대량의 데이터를 처리할 경우 데이터가 깨끗하고 체계적으로 정리되었는지 확인해야 하므로 더욱 어려울 수 있습니다. 다양한 웹사이트 구조를 관리한다면 여러 웹 기술도 이해해야 합니다.

즉, 데이터를 빈번하고 신속하게 스크래핑해야 한다면 수동 웹 스크래핑은 최선의 선택이 아닙니다.

Bright Data 금융 데이터 스크레이퍼 API로 데이터 수집하는 방법

Bright Data의 금융 데이터 스크레이퍼 API는 수동 스크레이핑의 어려움을 해결하며 데이터 추출을 자동화합니다. IP 차단 방지를 위한 회전 프록시 기능을 내장한 프록시 관리 시스템이 제공됩니다. 이 API는 JSON 및 CSV와 같은 형식으로 구조화된 데이터를 반환합니다. 또한 확장성이 뛰어나 대량의 데이터 처리도 용이합니다.

금융 데이터 스크레이퍼 API를 사용하려면 Bright Data 웹사이트에서 무료 계정을 생성하세요. 이메일 주소를 확인하고 필요한 신원 확인 절차를 완료하십시오.

계정 설정이 완료되면 로그인하여 대시보드에 접근하고 API 키를 발급받으세요.

금융 데이터 스크레이퍼 API 설정

대시보드에서 왼쪽 탐색 탭의 웹 스크레이퍼 API 로 이동하세요.
카테고리 에서 ‘금융 데이터’를 선택한 후 ‘Yahoo Finance 비즈니스 정보 – URL로 수집’을 클릭하여 엽니다:

Web Scraper API on the control panel

API 호출 설정 시작을 클릭하세요:

Set an API call

API를 사용하려면 Bright Data 스크레이퍼에 대한 API 호출을 인증하는 토큰을 생성해야 합니다. 새 토큰을 생성하려면 토큰 생성을 클릭하세요:

Creating a new API token

대화 상자가 열립니다. 권한을 “관리자”로 설정하고 기간을 “무제한”으로 지정하세요:

Setting the permissions for the new API token

이 정보를 저장하면 토큰이 생성되며 새 토큰이 표시됩니다. 곧 다시 필요할 수 있으니 안전한 곳에 보관하세요:

The new API token you got

이미 토큰을 생성한 경우, 사용자 설정의 API 토큰에서 확인할 수 있습니다. 사용자 정보의 ‘추가 정보’ 탭을 선택한 후 ‘토큰 복사’를 클릭하세요.

금융 데이터 수집을 위한 스크레이퍼 실행

Yahoo Finance 비즈니스 정보 페이지에서 API 토큰 필드에 API 토큰을 입력하고, 대상 웹사이트의 주식 URL( https://finance.yahoo.com/quote/AAPL/)을 추가하세요. 오른쪽 ‘인증된 요청’ 섹션의 요청을 복사하세요:

Setting up the scraper URL

터미널 또는 셸을 열고 curl을 사용하여 API 호출을 실행하세요. 다음과 같은 형식이어야 합니다:

curl -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" -d '[{"url":"https://finance.yahoo.com/quote/AAPL/"}]' "https://api.brightdata.com/datasets/v3/trigger?dataset_id=YOUR_DATA_SET_ID&include_errors=true"

명령어를 실행하면 응답으로 snapshot_id를 받게 됩니다:

{"snapshot_id":"s_m3n8ohui15f8v3mdgu"}

snapshot_id 를 복사한 후 터미널 또는 셸에서 다음 API 호출을 실행하세요:

curl -H "Authorization: Bearer YOUR_TOKEN" "https://api.brightdata.com/datasets/v3/snapshot/YOUR_SNAP_SHOT_ID?format=jsonl"

YOUR_TOKENYOUR_SNAP_SHOT_ID를 본인 인증 정보로 반드시 교체하세요.

이 코드를 실행하면 스크랩된 데이터가 출력됩니다. 데이터는 다음과 유사한 JSON 파일 형태여야 합니다.

스냅샷이 준비되지 않았다는 응답을 받은 경우, 10초 정도 기다린 후 다시 시도하세요.

Bright Data 금융 데이터 스크래퍼 API는 HTML 구조를 분석하거나 특정 태그를 찾을 필요 없이 필요한 모든 데이터를 추출했습니다. earning_estimate, earnings_history, growth_estimates와 같은 추가 필드를 포함한 페이지 전체 데이터를 가져왔습니다.

이 튜토리얼의 모든 코드는 이 GitHub 저장소에서 확인할 수 있습니다.

Bright Data API 사용의 이점

Bright Data의 Financial Data Scraper API는 스크래핑 코드 작성 및 관리의 필요성을 제거하여 스크래핑 과정을 단순화합니다. 또한 API는 프록시 로테이션 관리 및 웹사이트 이용 약관 준수를 통해 규정 준수를 보장하므로 차단되거나 규칙을 위반할 염려 없이 데이터를 수집할 수 있습니다.

Bright Data 금융 데이터 스크레이퍼 API는 최소한의 코딩으로 구조화되고 신뢰할 수 있는 데이터를 제공합니다. 페이지 탐색과 HTML 파싱을 자동으로 처리하여 프로세스를 간소화합니다. API의 확장성 덕분에 코드를 크게 변경하지 않고도 다수의 주식 및 기타 금융 지표 데이터를 수집할 수 있습니다. 웹사이트 구조가 변경될 때 Bright Data가 스크레이퍼를 업데이트하므로 유지보수 작업도 최소화됩니다. 추가 작업 없이도 데이터 수집이 원활하게 지속됩니다.

결론

금융 데이터 수집은 금융 분석, 알고리즘 트레이딩, 시장 조사에 참여하는 개발자와 데이터 팀에게 핵심적인 작업입니다. 본 문서에서는 Python과 Bright Data 금융 데이터 스크래퍼 API를 활용해 금융 데이터를 수동으로 스크래핑하는 방법을 알아보았습니다. 수동 스크래핑은 제어력을 제공하지만, 반스크래핑 조치 처리와 유지보수 부담이 어려울 수 있으며 확장성이 떨어집니다.

Bright Data 금융 데이터 스크레이퍼 API는 프록시 로테이션 및 CAPTCHA 해결과 같은 복잡한 작업을 관리하여 데이터 수집을 간소화합니다. API 외에도 Bright Data는 웹 스크래핑 프로젝트를 강화하기 위한 데이터 세트, 주거용 프록시, 스크래핑 브라우저를 제공합니다. Bright Data가 제공하는 모든 기능을 탐색하려면 무료 체험판에 가입하세요.