josw123 / dart-fss

한국 금융감독원에서 운영하는 다트(Dart) 시스템 크롤링을 위한 라이브러리
https://github.com/josw123/dart-fss
MIT License
327 stars 111 forks source link

분기별 재무제표 조회시 에러 #7

Closed yhs968 closed 5 years ago

yhs968 commented 5 years ago

안녕하세요. 라이브러리 잘 쓰고 있습니다. 분기별 재무제표 조회 코드를 돌리다가 다음과 같은 에러가 발생해서 문의드립니다. 뭔가 필드명이 안맞아서 그러는 것 같은데 혹시 해당 에러에 대해 체크 부탁드릴 수 있을까요? 감사합니다.

~/anaconda3/lib/python3.7/site-packages/dart_fss/crp.py in get_financial_statement(self, start_dt, end_dt, fs_tp, separate, report_tp, lang, show_abstract, show_class, show_depth, show_concept, separator) 186 report_tp=report_tp, lang=lang, show_abstract=show_abstract, 187 show_class=show_class, show_depth=show_depth, show_concept=show_concept, --> 188 separator=separator) 189 190

~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in search_financial_statement(crp_cd, start_dt, end_dt, fs_tp, separate, report_tp, lang, show_abstract, show_class, show_depth, show_concept, separator) 484 quarter = search_report_with_cache(crp_cd=crp_cd, start_dt=start_dt, end_dt=end_dt, 485 bsn_tp=['A003'], page_set=100, series='asc') --> 486 statements = append_fs(statements, quarter, fs_tp=fs_tp, separate=separate, lang=lang, report_tp='quarter') 487 488 columns = list(statements.columns)

~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in append_fs(financial_statements, reports, fs_tp, separate, lang, report_tp) 327 regex_label = re.compile(r'[ㄱ-힣]+(?[ㄱ-힣]+)?') 328 for report in tqdm(reports[1:], desc=desc, unit='page'): --> 329 fs = read_fs_table(report, fs_tp=fs_tp, separate=separate, lang=lang) 330 331 if fs is None:

~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in read_fs_table(report, fs_tp, lang, separate) 295 regex_text = separate_table if separate else consolidated_table 296 --> 297 df = html_to_df(soup, regex_text, separate=separate, lang=lang) 298 return df 299

~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in html_to_df(soup, regex_text, separate, lang) 226 tbody = get_table_body(table_html) 227 df = pd.read_html(tbody)[0] --> 228 df.columns = rename_columns(header=header, columns=columns, lang=lang, separate=separate) 229 for column in df.columns[1:]: 230 df[column] = df[column].apply(str_to_float)

~/anaconda3/lib/python3.7/site-packages/dart_fss/fs.py in rename_columns(header, columns, lang, separate) 58 additional = '' 59 ---> 60 if header[key]['instant_datetime'] is None: 61 start_datetime = header[key]['start_datetime'].strftime('%Y-%m-%d') 62 end_datetime = header[key]['end_datetime'].strftime('%Y-%m-%d')

KeyError: '제42기1분기말'

josw123 commented 5 years ago

Dart-fss 라이브러리에서는 공시 기수(e.g. 제 12기, 제 42기 1분기) 와 날자를 매칭시켜 사용합니다. 예를들어 아래와 같은 경우 Table Header의 "제 43 기초"를 날짜로 변경하기 위해 "제 43 기초"를 이용하여 "2010.01.01"를 추출하여 사용합니다.


연결 재무상태표

제 44 기          2011.12.31 현재 제 43 기          2010.12.31 현재 제 43 기초       2010.01.01 현재

  제 44 기 제 43 기 제 43 기초
자산      
유동자산 48,926,350 43,520,154 39,081,676
현금및현금성자산 6,231,946 6,215,815 5,400,090

그런데 삼성전자의 제42기 1분기의 Page를 보면 아래와 같이 되어 있습니다. 이때의 문제는 "제 42기 1분기말"과 매칭되는 문자열이 없다는 것입니다. 즉, 날짜를 추출하기 위해 사용되는 문장 "제42기1분기        2010년 03월 31일  현재"에는 "제42기1분기"로 작성되어 있고, Table Header에는 "제 42기 1분기말"로 작성되어 있어 매칭되는 문자열을 찾지 못하는 것입니다.


연 결 재 무 상 태 표

제42기1분기        2010년 03월 31일  현재 제41기말            2009년 12월 31일  현재

과목명 제 42기 1분기말 제 41기말
자               산    
유  동  자  산 55,296,702 54,211,297
현금및현금성자산 9,225,243 10,149,930

이 문제는 추후에 업데이트를 통해 해결하도록 하겠습니다. 버그 리포트 감사합니다.

yhs968 commented 5 years ago

체크해주셔서 감사합니다!