- Published on
DART 전자공시 보고서 크롤링 / API 사용법
- Authors
- Name
- 매크로 마스터
안녕하세요, 매크로마스터입니다.
오늘 소개해드릴 솔루션은 DART 전자공시 보고서를 크롤링하는 방법입니다. DART는 금융감독원이 운영하는 전자공시 시스템으로, 상장기업들이 공시해야 하는 다양한 보고서를 제공합니다. 이 보고서에는 재무제표, 연간보고서, 분기보고서, 주요사항보고서 등이 포함되어 있습니다.
DART API의 문제점은 데이터를 XML 형태로 내보내기 때문에 내가 찾고자 하는 보고서가 항상 같은 형식이 아니라면 원하는 데이터를 찾기가 거의 불가능하다는 점입니다. 예를 들어 전환사채권발행결정 보고서를 크롤링한다면 시설자금, 영업양수자금 등의 데이터가 항상 일정한 형식으로 기재되어 있지가 않습니다. 따라서 고객님의 상황에 맞는 맞춤형 솔루션이 필요합니다.
이런 분들에게 추천합니다
- DART API를 사용해 자동화 솔루션을 개발해보려고 했지만 XML 데이터를 처리하는 데 어려움을 겪는 분
- 다른 사람보다 더 쉽고 빠르게 원하는 종목 정보를 찾고 싶으신 분
프로그램 작동 방식
현재 데모로 보여드리는 프로그램은 입력된 기간의 전환사채권 발행결정, 신주인수권부사채권 발행결정, 교환사채권 발행결정 보고서를 찾아 엑셀 파일로 저장하는 프로그램입니다. 프로그램을 실행하면 다음과 같은 화면이 나타납니다.
프로그램 상에서는 생략되어 있지만, DART 홈페이지에서 내가 원하는 기업, 기간, 보고서 종류 등을 선택하기 위해 조건 설정이 필요합니다. 다음 코드는 검색 조건을 설정하는 코드 일부입니다.
self.driver.find_element(By.ID, "li_02").click()
time.sleep(0.5)
self.driver.find_element(By.ID, "publicTypeDetail_B001").click()
time.sleep(0.5)
search = self.driver.find_element(By.ID, "textCrpNm2")
search.send_keys(Keys.ENTER)
time.sleep(3)
게다가 데이터의 형식이 항상 같지 않기 때문에 코드가 복잡해질 수밖에 없습니다. 각 케이스를 꼼꼼하게 체크해 오류 없이 데이터가 수집되도록 코드를 작성하는 것이 가장 중요합니다. 표의 각 행을 순회하며 원하는 데이터를 찾는 코드 일부를 보여드리겠습니다. 정규식, 문자열 처리 등 다양한 기법을 사용해 데이터를 추출하고 있습니다.
for row in rows:
if "1차" in row.text:
cols = row.find_all("td")
if len(cols) < 5:
continue
search = re.search(".+ (\d\d\d).\d+", cols[4].text)
percent = (int(search.group(1)) - 100) if search is not None else 0
data["콜 행사일"] = (
cols[3]
.text.strip()
.replace("년", "-")
.replace("월", "-")
.replace("일", "")
.replace(".", "-")
)
data["콜 이율"] = f"{percent}%"
break
프로그래밍 전문가가 아니라면 각 경우를 처리하는 방법을 공부하는 데에도 오랜 시간이 걸릴 뿐더러, 프로그램 실행 중 발생하는 에러를 올바르게 처리하는 방법을 알아내는 것도 쉽지 않습니다. 그렇기에 저희 솔루션을 이용해주시는 대표님들이나 기업 관계자분들께는 해결하고자 하는 문제를 잘 정의하는 데에 집중하시고, 실제 프로그래밍은 전문가에게 맡기시라고 조언해 드리고 있습니다.
직접 구현하는 데 시간과 노력을 쏟지 마시고, 확실하고 간단한 방법으로 문제를 해결하세요.
프로그램 실행 결과
실제로 프로그램을 구동해 특정 기간의 보고서를 산출해낸 모습입니다.
샘플 파일을 아래 링크에서 다운받아 보실 수도 있습니다.
프로그램 구입 문의
위에서 설명드린 것처럼 고객님께서 원하시는 특정 유형의 DART 전자공시 보고서를 맞춤형으로 수집하고, 결과물 역시 원하시는 형태로 제작이 가능합니다.
프로그램 제작을 원하시면 아래 배너 클릭하셔서 오픈카톡으로 오시면 빠르고 친절하게 안내 도와드리겠습니다.
현금영수증 또는 세금계산서 발행 가능합니다!