이번 포스팅에서는 R로 쇼핑몰 웹사이트의 텍스트를 가져와서 최저가 Top 10 리스트를 선별해서 DataFrame으로 만든 후에, 이를 엑셀로 내보내기를 해보겠습니다.
아래 코드는 제 블로그에 질문을 남겨주신 분께서 거의 다 짜셨구요, 저는 엑셀로 내보내는 부분의 에러를 바로 잡는 방법을 안내해드렸었습니다.
textreadr, rvest, xlsx 등의 R 패키지와 사용법에 대해서 블로그의 본문에 정식으로 한번 더 소개해드리면 더욱 많은 분들께서 검색해서 이용하시기에 편리할 듯 해서 본문에 다시 한번 포스팅합니다.
1. R 패키지 설치 및 로딩
# clear all rm(list=ls()) # install and load libries install.packages("textreadr") install.packages("rvest") install.packages("xlsx") library(textreadr) library(rvest) library(xlsx)
|
2. 각 제품별로 엑셀 sheet 를 분리해서 최저가 Top 10 업체 결과 내보내기
urlbase <- "https://search.shopping.naver.com/search/all.nhn?query=" low <- c("에어팟","코카콜라","건전지","삼다수") df <- data.frame() # for loop statement for (i in low){ url <- paste(urlbase, i ,"&cat_id=&frm=NVSHATC",sep="") nv <- read_html(url, encoding = "UTF-8") st <- html_nodes(nv, '.mall_name') %>% html_text() st <- st[1:10] price3 <- html_nodes(nv, '._lowPriceByMall') %>% html_nodes('.price') %>% html_text() price3 <- gsub('최저가','',price3) price3 <- price3[1:10] # 최저가 Top 10 df <- data.frame(가게명=st, 가격=price3)
# append df to df_all df <- rbind(df, data.frame(가게명=url, 가격="r"))
# adding sheetName write.xlsx(df, file="C:/Users/admin/Documents/df_sheet.xlsx", sheetName=i, # excel sheet per each product or brand col.names=TRUE, append=TRUE)
# check progress print(paste0(i, " has been completed.")) }
|
위의 코드를 실행한 엑셀 파일은 아래와 같이 각 sheet 별로 제품이 구분이 되어있습니다.
3. 모든 제품에 대해서 하나의 엑셀 sheet에 모두 모아서 최저가 Top 10 결과 내보내기
urlbase <- "https://search.shopping.naver.com/search/all.nhn?query=" low <- c("에어팟","코카콜라","건전지","삼다수") df_all <- data.frame() # for loop statement for (i in low){ url <- paste(urlbase, i ,"&cat_id=&frm=NVSHATC",sep="") nv <- read_html(url, encoding = "UTF-8") st <- html_nodes(nv, '.mall_name') %>% html_text() st <- st[1:10] price3 <- html_nodes(nv, '._lowPriceByMall') %>% html_nodes('.price') %>% html_text() price3 <- gsub('최저가','',price3) price3 <- price3[1:10] df <- data.frame(item=i, 가게명=st, 가격=price3)
# append url info to df_all df <- rbind(df, data.frame(item=i, 가게명=url, 가격="r"))
# combining df to df_all one by one df_all <- rbind(df_all, df)
# check progress print(paste0(i, " has been completed.")) } # exporting df_all to excel write.xlsx(df_all, file="C:/Users/admin/Documents/df_all.xlsx", col.names=TRUE)
|
위의 코드를 실행한 엑셀 파일 결과는 아래와 같이 하나의 sheet에 각 제품(item) 변수로 구분이 되어서 한꺼번에 모아서 엑셀로 내보내기가 되었음을 알 수 있습니다.
많은 도움이 되었기를 바랍니다.
'R 분석과 프로그래밍 > R 프로그래밍' 카테고리의 다른 글
[R] DataFrame에서 특정 조건에 해당하는 행과 앞, 뒤 2개 행을 같이 제거하는 방법 (17) | 2019.09.27 |
---|---|
[R 프로그래밍] 반복문과 조건문을 써서 벡터에서 0이 연속 3번 나오면 구간 나누기 (6) | 2018.02.02 |
[R] 데이터프레임 다수 item을 가진 문자형 변수를 분리 후에 세로로 재구조화하기 (11) | 2016.09.29 |
[R] 여러개의 데이터프레임을 한꺼번에 하나의 데이터프레임으로 묶기, data.table package : rbindlist(data) (8) | 2016.07.10 |
[R] 폴더 내 여러개 파일들을 Loop 돌려서 자동으로 불러오기 (154) | 2016.07.02 |