DART 기업 공시 번거롭지 않게 조회하는 방법 : Python Selenium

DART 전자공시 시스템에서 기업의 공시 보고서를 파이썬 셀레늄 (Python Selenium)을 이용하여 접근하는 방법에 대해서 정리해보았다. Selenium을 이용하여 기업의 가장 최근 정기보고서를 클릭한 뒤 사업의 내용까지 클릭하는 방법이다. 어차피 사업 내용은 내 눈으로 읽어봐야하는 부분이기 때문에 크롤링은 하지 않고 창을 띄워서 클릭하는 것까지만 구현한다.

 

개요

기업의 기본적인 분석을 할 때 기초가 되는 것이 바로 기업의 공시이다.

분기보고서나, 반기보고서, 혹은 사업보고서를 읽다보면 우선 그 회사의 손익계산서 및 재무상태표가 나온다.

또한 그 회사가 영위하고 있는 주요 사업에 대한 정보와 계열회사 출자현황, 자회사 현황 등 많은 것들을 알 수 있다.

하지만 여러회사에 대해서 공시 보고서를 읽을 때 DART 홈페이지에 직접 들어가서 읽는게 굉장히 번거로운 경우가 많다.

가장 큰 문제는 검색 시스템이 클릭을 굉장히 여러번 해야 작동하게 되어있다는 점이다.

그래서 그 시간이나마 최대한 줄이기 위해 Selenium을 이용하기로 하였다.

 

 

필요한 Packages

Selenium이 필요하다

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.service import Service
from webdriver_manager.chrome import ChromeDriverManager

 

 

Selenium WebDriver 실행

우선 Selenium을 작동시킨다.

options = webdriver.ChromeOptions()
options.add_argument('window-size=1920x1080')
options.add_argument("disable-gpu")

driver = webdriver.Chrome(service = Service(ChromeDriverManager().install()), options=options)
driver.implicitly_wait(3)

 

 

XPATH 알아내기

Selenium 으로 켜진 Chrome 창 안에서 원하는 요소에 접근하기 위해서 요소별 XPATH를 알아내야한다.

 

크롬-개발자-도구
크롬 개발자 도구

 

크롬을 키고 F12나 설정에서 개발자 도구를 누르면 다음 창이 뜬다.

Ctrl + Shift + I 로도 위와 같이 개발자 도구로 접근할 수 있다.

 

 

개발자-도구-요소찾기
크롬 개발자 도구

그 상태에서 Ctrl + Shift + C를 누르고 XPATH를 알고 싶은 요소를 클릭하면 우측 개발자도구 Elements에서 해당 요소로 이동하게 된다.

 

XPATH찾기
XPATH 복사하기

 

우클릭해서 XPATH를 복사할 수 있다.

 

 

 

 

공시 보고서 선택하기

우선 DART 기업 공시 사이트로 이동해야한다.

기업 코드는 네이버 증권 등에서 조회해서 알아내자.

 

code = 000000  #<-- 기업 코드 삽입
url = f"https://dart.fss.or.kr/html/search/SearchCompany_M2.html?textCrpNM={code}"
driver.get(url)

 

이렇게 되면 해당기업 DART 공시 사이트로 이동한다.

이 상태에서 정기공시 버튼을 클릭한뒤, 검색하고, 가장 최근의 보고서를 클릭하자.

 

def xp(xpath):  ## XPATH로 element 찾아서 return하는 함수, 편의상 제작함
    return driver.find_element(by=By.XPATH, value = xpath)


xp('//*[@id="li_01"]/label/img').click()  #정기공시
xp('//*[@id="searchForm"]/div/div[1]/ul/li[1]/div/a').click()  #검색
time.sleep(1)
xp('//*[@id="tbody"]/tr[1]/td[3]/a').click()  #첫번째 보고서 검색

 

중간에 검색버튼을 누르고 반응이 올때까지 약간의 시간이 필요해서 time.sleep을 넣어주었다.

 

 

이제 새로운 창으로 공시 보고서가 열리므로 새로 열린창으로 넘어가야한다.

driver.switch_to.window(driver.window_handles[1])

 

공시 보고서 좌측의 목차에서 "사업" 내용이 들어간 부분을 찾아서, 거기를 클릭하는 코드를 짠다.

a = xp('//*[@id="listTree"]/ul').text
b = a.split("\n")

for i in range(len(b)):
    if "사업" in b[i]:
        c = i
        break

xp(f'//*[@id="{c+1}_anchor"]').click()

 

이제 사업의 내용을 확인할 수 있다.

크롤링이 필요하면 비슷한 방식으로 여기에서 내용을 받아오면 될 것이다.