개요
Open Dart 에서 제공하는 API 중 전체 기업의 코드, 기업명을 가져오는 통해 우리나라에 등록된 기업들을 가져오고 기업들을 DB 화 해보고자 PostgreSQL 을 설치완료 하였다.
다만 Open Dart 에서 제공하는 파일이 용량문제로 ZIP 형태로 제공하는데, python 을 통해 압축을 풀고, XML 파싱, PostgreSQL DB Insert 하는 프로그램을 개발해보고자 한다.
ZIP 파일 다운로드, 압축해제
먼저 Open Dart API 를 통해 ZIP 파일을 전송 받는다. (심플함 그냥 GET 하면 가져옴..)
다만 이를 위해 zipfile, io 모듈 추가가 필요하다.
import requests import json import zipfile import io def getAllData(): # Open Dart API 이용 reqUrl = 'https://opendart.fss.or.kr/api/corpCode.xml?' # API 신청에서 발급받은 키 세팅 reqUrl += 'crtfc_key=' + Constants.Global.dartApiKey # 응답 받은 후 response = requests.get(reqUrl) # ZipFile 객체 생성 zipFile = zipfile.ZipFile(io.BytesIO(response.content)) # 압축 해제 zipFile.extractall() def main(): getAllData() if __name__ == '__main__': main()
위의 로직을 실행 시키면 프로젝트 폴더에 다음과 같은 파일이 생성된다.
해당 파일은 XML 형태로 되어있으며, 상장/비상장을 막론하고 모든 국내 기업 리스트가 나열되어있다. 기업 수는 8만개가 넘으며, 용량도 XML 파일임에도 15MB 로 꽤나 큰편이다. 그만큼 우리나라에 회사가 엄청나게 많다는 거에 새삼스레 놀랬다.
회사코드 확인하기
CORPCODE XML 파일을 확인하면 다음과 같은 형태의 구조로 되어있다. 다만 모든 기업이 유가증권(코스피) 와 코스닥에 상장해 있는게 아니니 [stock_code] 컬럼은 비어있을 수 있다.
일단 이중에 stock_code가 있는 기업(상장기업)만 DB에 넣어서 관리 해보고자 한다.
<?xml version="1.0" encoding="UTF-8"?> <result> <list> <corp_code>00126380</corp_code> <corp_name>삼성전자</corp_name> <stock_code>005930</stock_code> <modify_date>20191209</modify_date> </list> ... </result>
마치며
python 을 공부하며 매번 놀라는 일은 날코딩을 아직까지 해 본 적이 없다. (아마 앞으로도 다룰 단순한 기능들에 대해 날코딩을 할 일은 없을 것으로 보인다.)
이미 널리 쓰이는 모듈들만 잘 활요해도 충분히 원하는 기능을 만들 수 있다는 점에서 더더욱 매력적이다. 다음번엔 XML 파싱과 DB(PostgreSQL) 연결을 해봐야지.
댓글 없음:
댓글 쓰기