작성자: admin 작성일시: 2016-07-10 14:23:13 조회수: 1445 다운로드: 44
카테고리: 금융 공학 태그목록:

공시 정보 RSS를 파이썬으로 읽는 법

국내 상장기업의 보고서나 공시 정보는 https://dart.fss.or.kr 웹사이트에서 제공하고 있으며 전체 자료의 목록은 RSS(Really Simple Syndication) 프로토콜을 통해 제공하고 있다. 여기에서는 파이썬을 사용하여 공시 정보 RSS를 읽는 방법을 설명한다.

우선 공시 정보의 RSS 주소는 다음과 같다.

회사별 공시 주소에서 XXXXXX 위치에는 회사의 CRP 코드가 들어간다. CRP 코드를 별도로 검색하는 것은 불가능하고 dars 웹사이트의 "기업개황"에서 화사를 검색하면 결과 페이지에 회사별 공시 RSS 주소를 얻을 수 있는 링크를 제공한다.

예를 들어 삼성전자의 공시 RSS 주소는 다음과 같다.

feedparser 패키지

파이썬에 RSS를 읽어주는 패키지로는 feedparser 패키지가 있다. parser 명령을 사용하면 RSS 파일을 파싱한다.

In:
import feedparser
In:
url = "http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00126380"
d = feedparser.parse(url)

파싱 결과는 FeedParserDict 자료형 객체에 저장된다. FeedParserDict 는 피드 정보를 담은 feed 속성과 개별적인 항목을 담은 entries 속성을 가진다.

In:
type(d)
Out:
feedparser.FeedParserDict

이 정보에는 한글이 섞여있다. 이런 자료형을 볼 때는 konply 패키지의 pprint 함수를 이용하면 편리하다.

In:
from konlpy.utils import pprint
In:
pprint(d.feed)
{'author': DART,
 'author_detail': {'name': DART},
 'authors': [{'name': DART}],
 'language': ko,
 'link': http://dart.fss.or.kr,
 'links': [{'href': http://dart.fss.or.kr,
            'rel': alternate,
            'type': text/html}],
 'published': Sun, 10 Jul 2016 05:19:31 GMT,
 'published_parsed': time.struct_time(tm_year=2016, tm_mon=7, tm_mday=10, tm_hour=5, tm_min=19, tm_sec=31, tm_wday=6, tm_yday=192, tm_isdst=0),
 'rights': DART,
 'rights_detail': {'base': http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00126380,
                   'language': None,
                   'type': text/plain,
                   'value': DART},
 'subtitle': DART : (유가)삼성전자의 공시 정보를 확인할 수 있습니다.,
 'subtitle_detail': {'base': http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00126380,
                     'language': None,
                     'type': text/html,
                     'value': DART : (유가)삼성전자의 공시 정보를 확인할 수 있습니다.},
 'title': DART : (유가)삼성전자의 공시,
 'title_detail': {'base': http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00126380,
                  'language': None,
                  'type': text/plain,
                  'value': DART : (유가)삼성전자의 공시},
 'updated': 2016-07-10T05:19:31Z,
 'updated_parsed': time.struct_time(tm_year=2016, tm_mon=7, tm_mday=10, tm_hour=5, tm_min=19, tm_sec=31, tm_wday=6, tm_yday=192, tm_isdst=0)}
In:
pprint(d.entries)
[{'author': 삼성전자,
  'author_detail': {'name': 삼성전자},
  'authors': [{'name': 삼성전자}],
  'guidislink': False,
  'id': http://dart.fss.or.kr/api/link.jsp?rcpNo=20160707800438,
  'link': http://dart.fss.or.kr/api/link.jsp?rcpNo=20160707800438,
  'links': [{'href': http://dart.fss.or.kr/api/link.jsp?rcpNo=20160707800438,
             'rel': alternate,
             'type': text/html}],
  'published': Thu, 07 Jul 2016 07:05:00 GMT,
  'published_parsed': time.struct_time(tm_year=2016, tm_mon=7, tm_mday=7, tm_hour=7, tm_min=5, tm_sec=0, tm_wday=3, tm_yday=189, tm_isdst=0),
  'title': (유가)삼성전자 - 기업설명회(IR)개최(안내공시),
  'title_detail': {'base': http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00126380,
                   'language': None,
                   'type': text/plain,
                   'value': (유가)삼성전자 - 기업설명회(IR)개최(안내공시)},
  'updated': 2016-07-07T07:05:00Z,
  'updated_parsed': time.struct_time(tm_year=2016, tm_mon=7, tm_mday=7, tm_hour=7, tm_min=5, tm_sec=0, tm_wday=3, tm_yday=189, tm_isdst=0)},
 {'author': 지완구,
  'author_detail': {'name': 지완구},
  'authors': [{'name': 지완구}],
  'guidislink': False,
  'id': http://dart.fss.or.kr/api/link.jsp?rcpNo=20160707000087,
  'link': http://dart.fss.or.kr/api/link.jsp?rcpNo=20160707000087,
  'links': [{'href': http://dart.fss.or.kr/api/link.jsp?rcpNo=20160707000087,
             'rel': alternate,
             'type': text/html}],
  'published': Thu, 07 Jul 2016 02:00:00 GMT,
  'published_parsed': time.struct_time(tm_year=2016, tm_mon=7, tm_mday=7, tm_hour=2, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=189, tm_isdst=0),
  'title': (유가)삼성전자 - 임원ㆍ주요주주특정증권등소유상황보고서,
  'title_detail': {'base': http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00126380,
                   'language': None,
                   'type': text/plain,
                   'value': (유가)삼성전자 - 임원ㆍ주요주주특정증권등소유상황보고서},
  'updated': 2016-07-07T02:00:00Z,
  'updated_parsed': time.struct_time(tm_year=2016, tm_mon=7, tm_mday=7, tm_hour=2, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=189, tm_isdst=0)},
 {'author': 삼성전자,
  'author_detail': {'name': 삼성전자},
  'authors': [{'name': 삼성전자}],
  'guidislink': False,
  'id': http://dart.fss.or.kr/api/link.jsp?rcpNo=20160707800065,
  'link': http://dart.fss.or.kr/api/link.jsp?rcpNo=20160707800065,
  'links': [{'href': http://dart.fss.or.kr/api/link.jsp?rcpNo=20160707800065,
             'rel': alternate,
             'type': text/html}],
  'published': Wed, 06 Jul 2016 23:30:00 GMT,
  'published_parsed': time.struct_time(tm_year=2016, tm_mon=7, tm_mday=6, tm_hour=23, tm_min=30, tm_sec=0, tm_wday=2, tm_yday=188, tm_isdst=0),
  'title': (유가)삼성전자 - 연결재무제표기준영업(잠정)실적(공정공시),
  'title_detail': {'base': http://dart.fss.or.kr/api/companyRSS.xml?crpCd=00126380,
                   'language': None,
                   'type': text/plain,
                   'value': (유가)삼성전자 - 연결재무제표기준영업(잠정)실적(공정공시)},
  'updated': 2016-07-06T23:30:00Z,
  'updated_parsed': time.struct_time(tm_year=2016, tm_mon=7, tm_mday=6, tm_hour=23, tm_min=30, tm_sec=0, tm_wday=2, tm_yday=188, tm_isdst=0)}]
In:
print(d.entries[0]["title"])
(유가)삼성전자 - 기업설명회(IR)개최(안내공시)

여기에서 시간정보는 struct_time 자료형이고 이를 사용하기 편한 datetime 자료형으로 변환하려면 다음과 같이 mktime 명령과 fromtimestamp 명령을 사용한다.

In:
d.entries[0]["published_parsed"]
Out:
time.struct_time(tm_year=2016, tm_mon=7, tm_mday=7, tm_hour=7, tm_min=5, tm_sec=0, tm_wday=3, tm_yday=189, tm_isdst=0)
In:
from time import mktime
from datetime import datetime

datetime.fromtimestamp(mktime(d.entries[0]["published_parsed"]))
Out:
datetime.datetime(2016, 7, 7, 7, 5)

현재 DARTS에서 RSS로 제공하는 정보는 제한적이므로 좀 더 자유롭게 사용하려면 DARTS의 API를 사용한다.

질문/덧글

아직 질문이나 덧글이 없습니다. 첫번째 글을 남겨주세요!