[SPAC주 분석] 4. 기업 고유번호 받아오기

2023. 7. 11. 17:29주식

1. 데이터 요청

  • OPENDART의 API에 기업에 대한 데이터를 요청하기 위해서는 해당 기업의 고유번호가 필요함(종목코드랑 다름)
  • "개발가이드" >"공시정보"로 들어가면 4번에 고유번호를 제공 받을 수 있는 가이드가 나와 있음.
  • 요청URL에 요청인자를 전달하면 압축파일을 전달받는 구조

https://opendart.fss.or.kr/guide/detail.do?apiGrpCd=DS001&apiId=2019018

import requests


url = "https://opendart.fss.or.kr/api/corpCode.xml"	# 요청URL
api_key = "your_api_key"
params = {
    'crtfc_key': api_key	# 요청인자
} 

res = requests.get(url, params=params)

2. 압축파일 받아와서 압축 풀기

  • copr_code.zip이라는 압축파일에 res에 담긴 내용 저장.(바이너리 파일이라 쓰기모드 "wb")
  • zipfile 패키지를 이용하여 압축해제하면 CORPCODE.xml이라는 파일이 튀어나옴.
import zipfile


with open('corp_code.zip', 'wb') as f:
    f.write(res.content)
    
zf = zipfile.ZipFile('corp_code.zip')
zf.extractall()


3. xml파일 파싱하기

  • xml.etree이용
  • <list>태그를 모두 찾기
import xml.etree.ElementTree as ET


tree = ET.parse('CORPCODE.xml')
root = tree.getroot()
tags_list = root.findall('list')
  • list 태그를 넣으면 dict로 변환하는 함수 만들기
  • 최종으로 dataframe형태로 만들기
  • xml을 바로 데이터프레임으로 변환하는 거 찾아보면 있을거 같긴 함
def convert(elem: ET.Element) -> dict:
    result_dict = {}
    for child in list(elem):
        result_dict[child.tag] = child.text
    return result_dict

tag_list_dict = [convert(x) for x in tags_list] 
df = pd.DataFrame(tag_list_dict)