반응형

전자공시(Open DART) 재무제표 크롤링 2 : Python

 

지난 "전자공시(Open DART) 재무제표 크롤링: Python"에서 기업고유번호, 단일회사 및 다중회사 주요계정, 단일회사 전체 재무제표를 받아오는 코드를 간단히 만들어봤습니다. 

 

오늘은 간단히 다음 2가지 사항을 가져오는 코드를 남깁니다.

  • 공시검색
  • 기업개황

 

공시검색은 이전과 마찮가지로 요청한 것에 대한 응답을 pandas 데이터프레임으로 반환하는 함수로 만들겁니다. 기업개황은 딱히 어디다 써야하는지 감이 오지 않아서 우선 그냥 딕셔너리로 반환하게끔 하였습니다.

 

 

공시검색

 

공시검색에 대한 설명은 "공시검색 개발가이드"에 잘 나와있습니다. 아래 표를 보시면 아시겠지만 인증키 외에는 필수적인 값이 아닙니다. 그냥 필요에 따라 넣어야 하는 것이지요.

명칭 타입 필수
여부
값 설명
crtfc_key API 인증키 STRING(40) Y 발급받은 인증키(40자리)
corp_code 고유번호 STRING(8) N 공시대상회사의 고유번호(8자리)
bgn_de 시작일 STRING(8) N 검색시작 접수일자(YYYYMMDD) : 없으면 종료일(end_de)
고유번호(corp_code)가 없는 경우 검색기간은 3개월로 제한
end_de 종료일 STRING(8) N 검색종료 접수일자(YYYYMMDD) : 없으면 당일
last_reprt_at

최종보고서
검색여부

STRING(1) N 최종보고서만 검색여부(Y or N) 기본값 : N
(정정이 있는 경우 최종정정만 검색)
pblntf_ty 공시유형 STRING(1) N  
pblntf_detail_ty 공시상세유형 STRING(4) N  
corp_cls 법인구분 STRING(1) N 법인구분 : Y(유가), K(코스닥), N(코넥스), E(기타)
※ 없으면 전체조회, 복수조건 불가
sort 정렬 STRING(4) N 접수일자: date
회사명 : crp
보고서명 : rpt

기본값 : date
sort_mth 정렬방법 STRING(4) N 오름차순(asc), 내림차순(desc) 기본값 : desc
page_no 페이지 번호 STRING(5) N 페이지 번호(1~n) 기본값 : 1
page_count 페이지 별 건수 STRING(3) N 페이지당 건수(1~100) 기본값 : 10, 최대값 : 100

 

코드를 간단히 하려다보니 기존 "전자공시(Open DART) 재무제표 크롤링: Python"에서 만들었던 convertFnltt() 함수를 이용하였습니다. 해당 코드는 바로 윗줄 링크에서 확인하시면 됩니다.

 

  def get_list(crtfc_key,**kwargs):
    """
    공시정보 조회
    """
    keys = ['corp_code','bgn_de','end_de','last_reprt_at','pblntf_ty',
          'pblntf_detail_ty','corp_cls''sort','sort_mth','page_no','page_count']
    for key in kwargs.keys():
      if not key in keys:
        print("get_list() has no parameter \'"+key+"\'")
        return False
    params = {**{'crtfc_key':crtfc_key},**kwargs}
    items = ['corp_cls','corp_name','corp_code','stock_code','report_nm',
             'rcept_no','flr_nm','rcept_dt','rm']
    item_names = ['법인구분','종목명','고유번호','종목코드','보고서명','접수번호',
                  '공시제출인명','접수일자','비고']
    url = "https://opendart.fss.or.kr/api/list.json"

    return convertFnltt(url,items,item_names,params)

 

테스트를 해보니까 함수를 쓸때에는 page_no="100"으로 넣어두는게 편할 것 같네요. 이 함수를 이용해서 조만간 관심 종목에 대한 공시정보를 주기적으로 확인하여, 메신져로 알림을 주는 코드를 만들어 볼 생각입니다.

 

 

기업개황

 

기업개황은 실은 어디다 써야할 지 모르겠습니다. 우선 간단하게 코드를 만들어봤기에 올립니다. 이건 데이터프레임이 아닌 딕셔너리로 반환합니다.

  def get_company(crtfc_key,corp_code):
    params = {'crtfc_key':crtfc_key,'corp_code':corp_code}
    url = "https://opendart.fss.or.kr/api/company.json"
    res = requests.get(url,params=params)
    json_dict = json.loads(res.text)
    del json_dict['status']; del json_dict['message']
    return json_dict

"기업개황 개발가이드"을 보시면 아시겠지만, 많이 궁금해 할 만한 정보가 있을까 싶습니다. 뭔가 구미에 당길만한 정보라면 나중에 메신저 채팅봇을 만들때 써먹을까 싶었는데, 고민 좀 해봐야겠네요..

반응형

+ Recent posts