DART에서 배당 관련 공시 읽어오기steemCreated with Sketch.

in #kr7 years ago (edited)

Steemit을 가입하고 인기 있는 글들을 보니 코인 및 코인 투자와 관련된 글들이 많아 보입니다. Steemit이라는 플랫폼 자체가 작동하는 방법에 대한 흥미가 생긴 것도 있어서, 많은 분들이 관심은 없으실 것 같지만, 개인적으로는 배당주 위주의 주식 투자를 하고 있어서 관련된 내용들을 올려보도록 하겠습니다.

결산배당 공시의 시즌이 다가오고 있다. 주총을 빠르게 열었던 일부 회사들의 경우, 결산 배당 공시가 DART에 올라오고 있다.

1.png

개인적으로 관심 있는 종목들의 배당 공시만 확인한다면 문제가 없겠지만, 2000개가 넘는 종목 수와 10원이라도 실제로 배당을 주는 종목이 1000여 개 정도 되는 상황에서 모든 종목의 배당 공시를 확인하려면, 아래와 같은 방법이 있을 것이다.

  • 특정 사이트(itooza, fnguide 등)에 연말 배당금 정보가 업데이트 될 때까지 기다린 뒤에 모든 종목에 대하여 크롤링하는 방법
  • 위의 방법의 경우 정보가 웹사이트에 업데이트 될 때까지 기다려야 하므로, 수동으로 배당금 공시를 일일이 확인해서 정리하는 방법

위와 같은 방법들을 고민하다가, 생각해보니 DART에서 배당금 관련 공시에 대한 정보를 자동으로 정리해서 엑셀 형태로 만들어주는 방안이 편할 것 같아서 간단한 코드를 작성해 보았다. 생각 외로 DART에서 제공하는 OPEN API가 아닌 방식으로 데이터를 읽어오는 내용이 웹상에 별로 없어서(검색을 잘 못하는 것일 수도 있지만), 어떤 방식으로 코드를 작성하였는지 간단히 정리해서 포스팅해본다.

먼저 작동 원리는 실제 배당금 공시를 찾아보는 과정과 동일하다.
2.png

DART 상세 검색 메뉴에서 "배당"을 키워드로 검색한다. 그렇게 나온 목록들에서 "현금·현물배당결정"이라는 제목을 가진 공시를 선택하면 아래와 같이 새로운 창이 뜬다. 여기서 필요한 배당금 공시 정보를 확인하므로, 이 과정을 그대로 구현하였다.

3.png

DART에서 상세 검색을 하게 되면 브라우저 검색창의 URL이 변경되지 않는데, 실제로 수행되는 URL을 통해 검색 결과를 확인할 수 있다. 예를 들어, 상세 검색에서 "배당"을 키워드로 검색한 결과를 확인할 수 있는 URL은 아래와 같다.

dart.fss.or.kr/dsab002/search.ax?reportName=배당

4.png

dart.fss.or.kr/dsab002/search.ax?

위와 같은 주소 뒤에 몇 가지 변수를 활용하면 상세 검색을 통해 얻을 수 있는 html 페이지로 접속할 수 있다.

변수 이름내용
reportName검색 보고서명
startDate시작 기간
endDate종료 기간
textCrpNm회사명
maxResult최대 검색 결과

위의 변수들을 이용한 예로 아래와 같은 URL로 접근하면, 2017년 12월 14일에 공시된 것들 중 "배당"이라는 항목이 보고서명에 포함된 경우가 검색된다.

http://dart.fss.or.kr/dsab002/search.ax?reportName=%EB%B0%B0%EB%8B%B9&&maxResults=100&&startDate=20171214&&endDate=20171214

5.png

다른 예로, 특정 종목의 배당 공시만 확인하고 싶다면 아래와 같이 검색해보면 된다.
http://dart.fss.or.kr/dsab002/search.ax?reportName=%EB%B0%B0%EB%8B%B9&&textCrpNm=S-Oil

6.png

배당과 관련된 공시들을 검색을 할 수 있게 되었으니 이제 하나의 배당 공시에서 필요한 정보를 가져와보자. 앞의 검색 결과에서 새 창을 통해 배당 공시를 보여주는 URL에 접근하기 위해서는 rcpNo 정보가 필요하다. 이는 앞의 검색 결과의 html 소스 코드에서 link 주소에서 얻을 수 있다.

6_2.png

그렇게 해서 아래와 같은 URL에 접근했을 때 문제는 실제 배당 관련 정보가 있는 네모의 모양의 영역에 html 형식으로 접근할 수가 없다.

7.png

해당 영역에 접근하기 위해서는 rcpNo와 dcmNo의 정보가 필요하다. 해당 정보 역시 html 소스 코드에서 획득할 수 있으며, 아래와 같은 url을 통해 html table 형태의 실제 정보에 접근 가능하다.

8.png

http://dart.fss.or.kr/report/viewer.do?rcpNo=xxx&dcmNo=xxx&eleId=0&offset=0&length=0&dtd=HTML

9.png

이와 같은 방식으로 작성된 툴을 결산배당 공시가 많이 올리는 2017년 2월에 대해 적용해본 엑셀 파일은 아래와 같다.

10.png

연말 배당 공시가 서서히 올라오게 되면 지속적인 테스트를 해보면서 디버깅을 해봐야겠다. 이를 통해 앞으로 2017년 결산 배당금 정보를 업데이트하는데 활용하기 좋을 것 같다.

지금까지 설명한 내용을 구현한 python 소스 코드를 정리하여 github에 업로드 하였다. 혹시 소스 코드를 참조하실 분들은 확인해보면 됩니다. 간략하게 실행 옵션들을 설명하면 특정 기간동안에 "배당"이라는 키워드가 들어간 공시를 찾는 동작(mode 0) 과 특정 기업에 대하여 "배당"이라는 키워드가 들어간 공시를 찾는 동작(mode 1)이 있다.

Mode 0의 예시이다.
● python dart_dividends.py -m 0 -s 20171115 -e 20171215 -o out_file_name

11.png

Mode 1의 예시이다.
● python dart_dividends.py -m 1 -c 삼성전자

12.png

Github repo.

Reference