etc/Crawling

[R] OpenDART 크롤링 (2) - 단일기업 전체 재무제표 가져오는 함수

코딩무민 2020. 12. 2. 10:55
반응형

오늘은 저번에 이어 상장기업 전체 재무제표를 가져와 보도록 하겠습니다! 

 

아래글을 참고해서 상장기업 고유번호를 가지고 오신 후 글을 이어보시면 됩니다. 

2020/12/02 - [크롤링/[R]] - [R] OpenDART API 크롤링 (1) - 상장기업 고유번호 가져오기

 

[R] OpenDART API 크롤링 (1) - 상장기업 고유번호 가져오기

오늘은 OpenDART를 이용하여 기업의 공시나 재무제표를 크롤링 하는 방법을 알아보도록 하겠습니다. 일단, 크롤링하기 위해서는 OpenDART의 API 인증키가 필요합니다. 인증키를 생성하는 방법은 아래

coding-moomin.tistory.com

0. 필요한 라이브러리 설치

library(jsonlite)
library(tibble)
library(diplyr)

1. Request 해야 할 인자 알아보기

일단, 어떤 URL을 가지고 오기 위한 요청 인자에 무엇이 있는지 알아보도록 하겠습니다. 

1) 개인 OpenaPI 인증키 

2) 기업의 고유 번호 

3) 사업 연도 

4) 보고서의 종류

5) 연결 재무제표 여부 

이렇게 총 5가지를 요청인자로 써야함을 알 수 있습니다. 

2. 요청인자 바꿔주기

사용자가 더욱 간단하게 요청인자를 사용할 수 있게 만들기 위해 몇몇 함수를 통해 위를 바꿔주도록 하겠습니다. 

요청인자 설명
corpname 기업명
reprt_name 보고서명 (y : 사업보고서 / h : 반기보고서 / q1 : 1분기 보고서 / q3 : 3분기 보고서)
consolid 연결재무제표 여부 (c : 연결재무제표, nc : 재무제표) 
corp_code <- read.csv('기업_고유번호.csv')

# 기업고유번호
change_corpname <- function(corp_name){
  corpcode <- corp_code %>% 
    filter(corpname == corp_name) %>%
    select('corpcode') %>% as.character() 
  return(corpcode)
}


# 보고서코드 
change_labels <- function(reprt_name){
  x = ''
  if (reprt_name == 'y'){
    x = '11011'
  } else if (reprt_name == 'h'){
    x = '11012'
  } else if (reprt_name == 'q1'){
    x = '11013'
  } else if (reprt_name == 'q3'){
    x = '11014'
  }
  return(x)
}

# 연결재무제표 여부
consolid_or_not <- function(consolid){
  x = ''
  if (consolid == 'c'){
    x = 'CFS'
  } else if (consolid == 'nc'){
    x = 'OFS'
  }
  return(x)

3. 재무제표 가져오기

바꾼 요청인자와 원래 요청인자를 모두 넣고, 다음 함수를 실행하면 단일기업이 전체 재무제표를 볼 수 있습니다. 

# 사업, 반기, 분기 보고서
report_earning1 <- function(crtfc_key, corp_name, bsns_year, reprt_name, consolid){
  reprt_code <- change_labels(reprt_name)
  fs_div <- consolid_or_not(consolid)
  corp_code <- change_corpname(corp_name)
  res <- httr::GET(url = 'https://opendart.fss.or.kr/api/fnlttSinglAcntAll.json',
                   query = list(crtfc_key = I(x = crtfc_key),
                                corp_code = corp_code,
                                bsns_year =bsns_year,
                                reprt_code = reprt_code,
                                fs_div = fs_div ))
  data <- fromJSON(res$url)
  report <- data$list
  return(tibble(report))
}

 

4. Test 코드

결과 예시입니다! 

crtfc_key <- "본인의 인증키"
corp_name <- "삼성전자" 
bsns_year <- "2019" 
reprt_name <- "y" 
consolid <- "c"

data1 <- report_earning1(crtfc_key, corp_name, bsns_year, reprt_name, consolid)
head(data1)

 

 

아래 링크는 위의 함수가 들어있는 R 패키지 링크입니다! 

github.com/mrobo2016/KFinReport

 

mrobo2016/KFinReport

Contribute to mrobo2016/KFinReport development by creating an account on GitHub.

github.com

 

반응형