출처:
퀀트투자쿡북 / 저자: 이현열: 4.2.2 기업공시채널에서 오늘의 공시 불러오기
(혼자한 연습)

한국거래소 오늘의 공시 크롤링

목표: 오늘의 공시를 통해 날짜별로 공시 기업 정보를 가져오고자 함
주의: 이번에는 POST 형식이므로 이 점 유의할 것

0. 필요한 패키지 다운로드
library(rvest)
library(httr)
library(tidyverse) #dplyr을 받아야 %>%(pipeline)을 사용할 수 있음
1. url 파악 + 형식 파악
  1. 오늘의 공시에서 날짜를 바꿔보자
  • 우선 url이 바뀌지 않음을 알 수 있다 → POST 형식
  1. 개발자환경 Network에서 todaydisclosure.do에서 정보를 요청하는 것을 알 수 있는데,
  • Request Method: POST를 통해 POST 형식임을 알 수 있다

우선 데이터를 전부 긁어오자

url <- "https://kind.krx.co.kr/disclosure/todaydisclosure.do" #공통된 부분
                                                              #POST 형식이므로 FromData 부분으로 쿼리를 작성해줘야 함

Sys.setlocale("LC_ALL", "English") #오류를 피하기 위해 시스템 언어를 영어로 임시적으로 변경
## [1] "LC_COLLATE=English_United States.1252;LC_CTYPE=English_United States.1252;LC_MONETARY=English_United States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252"
data <- POST(
  url,
  body = list(
    method = "searchTodayDisclosureSub",
    currentPageSize = "15",
    pageIndex = "1",
    orderMode = "0",
    orderStat = "D",
    forward = "todaydisclosure_sub",
    chose = "S",
    todayFlag = "N",
    selDate = "2018-12-28"
  )
)

data #인코딩: UTF-8임을 파악 #여기까지가 데이터를 읽어오는 부분
## Response [https://kind.krx.co.kr/disclosure/todaydisclosure.do]
##   Date: 2019-08-10 15:47
##   Status: 200
##   Content-Type: text/html; charset=UTF-8
##   Size: 10.5 kB
## 
## 
## 
## 
## 
## 
## <section class="scrarea type-00">
##  <table class="list type-00 mt10" summary="<U+C2DC><U+AC04>, <U+D68C><U+C0AC><U+BA85>, <U+ACF5><U+C2DC><U+C81C><U+BAA9>, <U+C81C><U+CD9C><U+C778>, <U+CC28><U+D2B8>/<U+C8FC><U+AC00>">
##      <caption><U+BAA9><U+B85D></caption>
##      <colgroup>
## ...

이제 테이블 정보를 긁어와야함

data <-  #이제 html을 읽어와야 함
  read_html(data) %>% 
  html_table(fill = T) %>%   #table 형식의 데이터는 이 코드를 추가시켜줘야 함
  .[[1]]

Sys.setlocale("LC_ALL", "Korean") 

그에 따른 결과물은 아래와 같다

data %>% head()
##      NA           NA                                          NA
## 1 18:32     화신테크                                최대주주변경
## 2 18:26 에스제이케이 증권 발행결과(자율공시)(제3자배정 유상증자)
## 3 18:11     아이엠텍               [정정]유상증자결정(제3자배정)
## 4 18:10 시그넷이브이                          유형자산 양수 결정
## 5 18:09                         자기주식매매신청내역(코스닥시장)
## 6 18:09                                 대량매매내역(코스닥시장)
##               NA                             NA
## 1       화신테크 공시차트\r\n\t\t\t\t\t주가차트
## 2   에스제이케이 공시차트\r\n\t\t\t\t\t주가차트
## 3       아이엠텍 공시차트\r\n\t\t\t\t\t주가차트
## 4   시그넷이브이 공시차트\r\n\t\t\t\t\t주가차트
## 5 코스닥시장본부                               
## 6 코스닥시장본부
  • 위의 쿼리에서 selDate을 변경함에 따라 다른 정보를 가져올 수 있다.
  • 테이블을 정리하는 구문, selDate을 생성하는 구문 등을 추가하면 자동적으로 깔끔한 테이블을 받을 수 있다.