해당사이트 에서 방법을 가져와서 정리한 것
네이버금융의 최신영업일 가져오는 것을 해보겠다. 저번시간엔 httr
의 GET, POST 방법으로 html 데이터를 가져온 뒤, rvest
로 필요한 데이터를 가져왔다. 이번에는 Xpath
를 이용하여 가져와보자.
이전과 같이 2가지 패키지를 불러온다. 크롬에서 복사한 xpath 를 직접 넣어주면 된다.
library(httr)
library(rvest)
url='https://finance.naver.com/sise/sise_deposit.nhn'
biz_day = GET(url) %>%
read_html(encoding = 'EUC-KR') %>%
html_nodes(xpath=
'//*[@id="type_0"]/div/ul[2]/li/span') %>%
html_text()
print(biz_day)
## [1] "<U+00A0><U+00A0>|<U+00A0><U+00A0>2019.09.04"
우리가 원하는 형태로 date = '20190807'
변경하기 위하여, stringr
패키지를 설치 후 불러온다.
library(stringr) #문자패턴을 수정
biz_day = biz_day %>%
str_match(('[0-9]+.[0-9]+.[0-9]+') ) %>%
str_replace_all('\\.', '')
print(biz_day)
## [1] "20190904"
복습도 할겸, 앞에 배웠던 종목코드 가져오기 에 biz_day
를 넣어보자.
# 1. OTP 발급
gen_otp_url <- 'http://marketdata.krx.co.kr/contents/COM/GenerateOTP.jspx'
gen_otp_data<-
POST(gen_otp_url,
query= list(
name = 'fileDown',
filetype = 'csv',
url = 'MKD/03/0303/03030103/mkd03030103',
tp_cd = 'ALL',
date = biz_day,
lang = 'ko',
pagePath = '/contents/MKD/03/0303/03030103/MKD03030103.jsp'))
# httr::POST 를 활용하여 otp 가 있는 html 데이터 가져오기
otp <- gen_otp_data %>%
read_html() %>%
html_text()
# rvest 의 함수를 이용하여 필요한 otp 값 불러오기
# 2. POST 로 다운로드
library(readr) # read_csv() 함수를 위한 패키지
down_url <- 'http://file.krx.co.kr/download.jspx'
down_sector <- POST(down_url, query = list(code = otp),
add_headers(referer = gen_otp_url)) %>%
read_html() %>%
html_text() %>%
read_csv()
down_sector = down_sector[order(down_sector$`시가총액(원)`,decreasing=TRUE),] #시가 총액순서로 정렬
print(head(down_sector))
## # A tibble: 6 x 7
## 시장구분 종목코드 종목명 산업분류 `현재가(종가)` 전일대비 `시가총액(원)`
## <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
## 1 코스피 005930 삼성전자~ 전기전자 44100 850 2.63e14
## 2 코스피 000660 SK하이닉스~ 전기전자 80000 3000 5.82e13
## 3 코스피 005935 삼성전자우~ 전기전자 36700 500 3.02e13
## 4 코스피 005380 현대차 운수장비 128500 0 2.75e13
## 5 코스피 035420 NAVER 서비스업 151000 500 2.49e13
## 6 코스피 012330 현대모비스~ 운수장비 250500 1500 2.39e13
write.csv(down_sector, 'data/krx_sector.csv')