본문 바로가기
python/주식

python - 다트.전자공시 Open API 활용(1), 전체 상장사(고유코드) 조회 - zip파일 읽기, xml to json 변환

by 맑은안개 2020. 2. 22.

 

주식 가치투자에 대해 공부하던 중 기업의 공시 정보를 제공하는 사이트를 알게 되었다. 기업개황, 사업보고서등의 정보가 OPEN API로 제공되는데 여러장에 걸쳐 API 사용법과 데이터 핸들링에 대해 알아본다.

 

관련 포스트 시리즈

 

참고: 

https://opendart.fss.or.kr/

 

전자공시 시스템의 OPEN API중 "공시정보 목록"은 Zip 파일로 제공한다. 

( 아래 API URL은 인증키가 있어야 하므로 인증키 신청을 먼저 해야 함. )

 

전자공시 OPEN API 사이트

XML, HTML파서인 BeautifulSoup을 사용하기 위해 패키지 설치를 선행한다.

pip install BeautifulSoup

 

Python에서 공시검색 Rest api를 요청하여 Zip파일을 Stream으로 읽는다.

Stream 은 BytesIO를 사용하여 파일처럼 로드 한다.

# -*- coding: utf-8 -*-
from urllib.request import urlopen
from zipfile import ZipFile
from io import BytesIO
from bs4 import BeautifulSoup

url = "https://opendart.fss.or.kr/api/corpCode.xml?crtfc_key=Insert your crtf key"

resp = urlopen(url)

# 수신된 resp의 bytes를 Buffer에 쌓고 zip file을 로드한다.
with ZipFile(BytesIO(resp.read())) as zf:
  file_list = zf.namelist()
  while len(file_list) > 0:
    file_name = file_list.pop()
    corpCode = zf.open(file_name).read().decode()
    break

# XML 데이터 파싱
soup = BeautifulSoup(corpCode, 'html.parser')

print(soup.prettify())

OUT [1]: #결과
<result>
 <list>
  <corp_code>
   00918949
  </corp_code>
  <corp_name>
   동화테크
  </corp_name>
  <stock_code>
  </stock_code>
  <modify_date>
   20200129
  </modify_date>
 </list>
 <list>
  <corp_code>
   00132008
  </corp_code>
  <corp_name>
   선우
  </corp_name>
  <stock_code>
  </stock_code>
  <modify_date>
   20200129
  </modify_date>
 </list>
</result>

(참고) 수신데이터 용량이 크므로 soup.prettify() 수행시간 오래 걸림

Zip파일은 복수개의 파일이 있을 수 있으므로 namelist() 로 파일이름을 list로 받는다.

ZipFile 로 오픈 후 read() 시 byte형태 이기 때문에 decode() 처리 한다.

corpCode = zf.open(file_name).read().decode()

※ BytesIO 함수는 io 라이브러리에서 제공하며 Python 2.6, 2.7, 3.x 버전에서 제공 됨

 

위에서 얻은 XML을 Dict나 Json 데이타 타입으로 변경하려면 아래 링크를 참조한다.

2021/02/08 - [python] - Python - BeautifulSoup 객체(ResultSet, Tag) Dict, XML로 변환하기

 

Python - BeautifulSoup 객체(ResultSet, Tag) Dict, XML로 변환하기

준비 라이브러리 from bs4 import BeautifulSoup import json import xmltodict XML 파싱을 위한 라이브러리 BeautifulSoup JSON 변환용 라이브러리 json XML을 JSON으로 변환 라이브러리 xmltodic XML 파싱 soup..

youngwonhan-family.tistory.com

 

반응형