2020-01-28 현재 내가 인턴을 진행하고 있는 로투스베이커리즈코리아에 관해 네이버의 평판이 어떤지 궁금하여 “로투스 과자” 라는 검색어에 대한 블로그 제목들과 날짜를 크롤링해보기로 하였다. 우선 필요한 패키지들을 알아보자
library(rvest)
## Loading required package: xml2
library(stringr)
우리는 네이버 블로그를 크롤링하여 제목과 작성 날짜를 가져올 것이다. 제목과 날짜를 저장해줄 column을 미리 생성해두자. 또한, 웹크롤링에 필요한 url들을 저장해야한다 이도 미리 생성해두자
title<-c()
day<- c()
url<- c()
for(i in 0:99){
url[i+1]<- paste0("https://search.naver.com/search.naver?date_from=&date_option=0&date_to=&dup_remove=1&nso=&post_blogurl=&post_blogurl_without=&query=%EB%A1%9C%ED%88%AC%EC%8A%A4%20%EA%B3%BC%EC%9E%90&sm=tab_pge&srchby=all&st=sim&where=post&start=",as.character(10*i+1));
lotus1<- read_html(url[i+1]);
title1<- lotus1 %>% html_nodes('._sp_each_title') %>% html_text;
title<- c(title,title1);
day1<-str_split(lotus1 %>% html_nodes('.txt_inline') %>% html_text,' ')
temp<- c()
for(j in 1:10){
temp[j]<- day1[[j]][1]
}
day<- c(day,temp);
}
csv1<- data.frame(title,day)
head(csv1);
## title day
## 1 로투스 스프레드 호주과자 추천! 2020.01.02.
## 2 로투스 비스코프(lotus) 과자 천원! 2019.11.11.
## 3 [맛있는 과자 추천]아이들이 좋아하는 로투스 공룡 과자 2019.03.25.
## 4 티타임에 어울리는 과자 로투스 비스코프 2019.12.05.
## 5 로투스 신제품 공룡과자 맛있어! 아이 간식으로 딱이야~ 2019.03.27.
## 6 신제품 로투스 디노사우르스 공룡 과자 계속 먹게 되는 거 있죠 2019.03.19.
write.csv(csv1,"web crawling.csv");
library(KoNLP)
## Checking user defined dictionary!
library(wordcloud)
## Loading required package: RColorBrewer
webc<- read.csv(file.choose(),header=T)
title1<- as.character(webc$title)
이번 워드클라우드 제작에 사용할 사전은 SejongDic이다. 또한, extractNoun을 통해 명사 추출을 해주게 되는데 고유 명사는 사전에 등록이 되어있지 않으므로 사전에 추가를 해주면서 필요없는 단어, 잘못 합쳐진 단어들은 분리를 해줘야한다 따라서, 추출과 등록을 번갈아가면서 반복해줘야한다.
이번 과정에선 정말 간단한 워드클라우드 작성을 해볼 것이기에 이 과정은 1번만 진행하였다.
useSejongDic() # 세종사전 불러오기
## Backup was just finished!
## 370957 words dictionary was built.
mergeUserDic(data.frame(c("비스코프"),"ncn")) # 사전에 비스코프 단어 추가
## Warning: 'mergeUserDic' is deprecated.
## Use 'buidDictionary()' instead.
## See help("Deprecated")
## 1 words were added to dic_user.txt.
sap<- sapply(title1,extractNoun,USE.NAMES=F) # 명사 추출
usap<- unlist(sap) # list 분리
usap<-gsub("고양이","",usap) # 고양이 단어 제거
usap1<- Filter(function(x){nchar(x)>=2},usap) # 2글자 이상 단어 추출(1글자 단어 제거)
tbt<- head(sort(table(usap1),decreasing=T),100) # 상위 100개 단어 추출
다음은 워드클라우드에 사용할 색깔을 찾을 것이다
display.brewer.all()
이번 과정에선 Paired set을 사용할 것이다.
그리고 tbt를 확인해보면 가장 많이 나온 단어가 로투스, 과자임을 확인할 수 있는데 이는 당연한 것이므로 제거를 해준다.
colorn<- brewer.pal(12,"Paired")
tbn<- tbt[c(-1,-3)];
그 다음 조건에 맞게 내용들을 넣어주면 완성!
wordcloud(names(tbt[-1]),tbt[-1],random.color=T,colors=colorn,random.order=F,scale=c(8,0.6))
## Warning in wordcloud(names(tbt[-1]), tbt[-1], random.color = T, colors =
## colorn, : 과자 could not be fit on page. It will not be plotted.
결과를 보면 알겠지만 전처리를 대충해주었기에 로투스비스코프, 로투스케이크 등 분리되지 않은 단어도 여럿 보인다
이번에도 확인할 수 있듯이 역시 무슨 함수를 사용하던 데이터 전처리가 제일 중요하다는 것을 알 수 있다.