AI 세무사! 시리즈를 소개합니다 자세히보기

코딩

dart 전자공시된 회사 크롤링 하기, 기업 재무제표 크롤링하기, 기업 재무제표 자동으로 가져오기

강한인상이다 2024. 1. 10. 16:07

dart 에서 공시된 정보를 가져 오는 방법은 두가지 입니다.

 

1. api 키를 발급받아 가져오기

2. selenium 과 chromedrive 모듈을 사용하여 쿼리주소를 찾고 bs4 로 파싱하기

 

 

 

첫번째 방법 부터 알아 보겠습니다.

 

아래는 dart api 키를 발급받아 공시 정보를 가져 오는 방법입니다. 먼저 찾고자 하는 회사의 고유번호를 찾아야 합니다.

 

crtfc_key ='tell_me'에서 tell_me 를 발급받은 api 키로 변경하세요.

 

# # 1. 다트 api 에서 api 키를 발급 받기
# https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS001&apiId=2019018

# # 2. 다트 개발가이드에서 고유번호 요청 url 확인
# https://opendart.fss.or.kr/guide/main.do?apiGrpCd=DS001


# # 3. 개발자 가이드에서 필요한 코드 확인하기
# https://dart-fss.readthedocs.io/en/latest/dart_search.html



crtfc_key = 'tell_me'
 
import requests 
import pandas as pd 
import io 
import zipfile
import xml.etree.ElementTree as et 
import json


def get_corpcode(crtfc_key): 
    """ 
    OpenDART 기업 고유번호 받아오기 
    return 값: 주식코드를 가진 업체의 DataFrame 
    """ 
    params = {'crtfc_key':crtfc_key} 
    items = ["corp_code","corp_name","stock_code","modify_date"] 
    item_names = ["고유번호","회사명","종목코드","수정일"] 
    url = "https://opendart.fss.or.kr/api/corpCode.xml" #요청 url
    res = requests.get(url,params=params) #url 불러오기
    zfile = zipfile.ZipFile(io.BytesIO(res.content))  #zip file 받기
    fin = zfile.open(zfile.namelist()[0])  #zip file 열고
    root = et.fromstring(fin.read().decode('utf-8'))  #utf-8 디코딩
    data = [] 
    for child in root: 
        if len(child.find('stock_code').text.strip()) > 1: # 종목코드가 있는 경우 
            data.append([]) #data에 append하라 
            for item in items: 
                data[-1].append(child.find(item).text) 
    df = pd.DataFrame(data, columns=item_names) 
    return df


stock_comp = get_corpcode(crtfc_key)

with open('고유번호.txt', 'w', encoding='utf-8') as file:
    file.write(stock_comp.to_string())


#         고유번호          종목코드 수정일
# 2362  01204056  하이브  352820  20230110

 

하이브의 dart 고유번호는 01204056 입니다. 

 

이제 필요한 데이터의 url 을 확인하고 연도를 입력하면 하이브에서 공시한 사업보고서를 저장할 수 있습니다. 

 

역시 url 에서 tell_me 부분을 발급받은 api 키로 변경해서 실행해야 합니다.

import requests

# API 요청 URL  하이브 고유번호를 찾아서 입력 2023년 4월에 공시된 사업보고서, 최근3개년 18기,17기,16기
url = 'https://opendart.fss.or.kr/api/fnlttSinglAcntAll.json?crtfc_key=tell_me&corp_code=01204056&bsns_year=2022&reprt_code=11011&fs_div=CFS'

# HTTP 요청을 보내어 응답 받기
response = requests.get(url)

# 응답이 성공적인지 확인
if response.status_code == 200:
    # JSON 데이터를 파일로 저장    재무상태표 저장
    with open('single_pages\datas\hybe_data\hybe2023.json', 'w', encoding='utf-8') as file:
        file.write(response.text)
    print("JSON 파일이 성공적으로 저장되었습니다.")
else:
    print("요청에 실패했습니다. 상태 코드:", response.status_code)

 

json으로 저장된 하이브 사업보고서

 

도움이 되셨다면 구독하기 버튼과 하트 버튼을 눌러주세요~

 

유용한 코드를 공유해 드립니다

 

 

반응형