반응형
오늘은 OpenDART를 이용하여 기업의 공시나 재무제표를 크롤링 하는 방법을 알아보도록 하겠습니다.
일단, 크롤링하기 위해서는 OpenDART의 API 인증키가 필요합니다.
인증키를 생성하는 방법은 아래 링크를 보시면 자세히 나와있습니다!
2020/10/16 - [크롤링] - [Python] 다트(DART) 오픈 API 공시(재무제표) 크롤링(Crawling)
이제 R을 이용하여 상장기업 고유번호를 가져와보도록 하겠습니다.
0. 필요한 Library 설치
R 크롤링에 필요한 라이브러리를 설치합니다.
#install.packages("httr")
#install.packages("rvest")
#install.packages("xml2")
library(httr)
library(rvest)
library(xml2)
1. URL Request 후 파일 Unzip
API 인증키를 넣은 후, URL을 Request하면 ZIP 파일이 불러와집니다.
이를 Download 하고 압축파일을 unzip 합니다.
마지막으로 read_xml을 이용해서 이를 읽어주면 다음과 같은 형태로 나오게 됩니다.
# Unzip the file
crtfc_key= '자신의 인증키'
res <- httr::GET(url = 'https://opendart.fss.or.kr/api/corpCode.xml',
query = list(crtfc_key = I(x = crtfc_key)))
dir = "CORPCODE.zip"
download.file(res$url, dir, mode="wb")
unzip("CORPCODE.zip")
xdata = read_xml('CORPCODE.xml', Encoding = "UTF-8")
print(xdata)
결과는 다음과 같이 나오는 것을 알 수 있습니다.
2. 데이터 전처리
이제 불러온 데이터 중 text만 추출한 뒤, DataFrame 형식으로 바꾸어주도록 하겠습니다.
xml_children()은 xml을 각각을 더 하위노드로 쪼개주는 함수입니다.
xml_children(xdata)
xml_children(xml_children(xdata))
2-1) Text 만 추출하는 법
xml_children() 함수를 2번 적용한 후 xml_contents()를 이용해 내용만 불러오고 이를 문자열로 바꿔주는 과정입니다.
text_list = xml_children(xml_children(xdata)) %>% xml_contents() %>% as.character()
head(text_list, 20)
2-2) Data.Frame 형식으로 바꾸기
빈 list 3개를 만들어주고, 각각 순서에 맞게 list에 넣어준 후 dataframe으로 합쳐주면 모든 과정이 끝이 나게 됩니다.
corpcode = c() ; corpname = c() ; m_date = c()
len <- length(text_list) /4
for(i in 1:len){
corpcode[i] = text_list[4*(i-1)+1] #기업 고유번호는 4개중 1번째
corpname[i] = text_list[4*(i-1)+2] #기업명은 4개중 2번째
m_date[i] = text_list[4*(i-1)+4] #수정 날짜는 4개중 4번째
}
data = data.frame(corpcode, corpname, m_date)
print(head(data))
write.csv(data, '기업_고유번호.csv')
다음 포스팅은 상장기업의 재무제표를 가져오는 크롤링을 해보도록 하겠습니다!
참고
반응형
'etc > Crawling' 카테고리의 다른 글
[R] OpenDART 크롤링 (2) - 단일기업 전체 재무제표 가져오는 함수 (1) | 2020.12.02 |
---|---|
[Python] 다트(DART) 오픈 API 공시(재무제표) 크롤링(Crawling) (0) | 2020.10.16 |