>RE::VISION CRM

R 데이터 분석

[kbdaa_bda] 블로그 크롤링 후 텍스트 분석

YONG_X 2017. 9. 22. 12:33



# 네이버 블로그에서 '은행'으로 검색 크롤링

# 10페이지(100개)의 블로그 요약 내용으로 워드 클라우드 그리기


# 먼저 크롤링

install.packages('XML')

install.packages('rvest')

library(XML)

library(rvest)


# 네이버 블로그에서 은행으로 검색한 결과화면 URL

# https://section.blog.naver.com/sub/SearchBlog.nhn?type=post&option.keyword=%EC%9D%80%ED%96%89&term=period&option.startDate=2017-09-01&option.endDate=2017-09-15&option.page.currentPage=


BlogData <- function(num){

  url=paste0("https://section.blog.naver.com/sub/SearchBlog.nhn?type=post&option.keyword=%EC%9D%80%ED%96%89&term=period&option.startDate=2017-09-01&option.endDate=2017-09-15&option.page.currentPage=",as.character(num))

  

  

  doc <- read_html(url)

  doc_parse = htmlParse(doc, isHTML=T, asText=T)

  

  title <- xpathSApply(doc_parse,"//-[@id='blogSearchForm']/div[2]/ul[3]/li/h5/a",xmlValue)

  nick <- xpathSApply(doc_parse,"//div[@class='list_data']/a",xmlValue)

  theme <- xpathSApply(doc_parse,"//span[@class='category']",xmlValue)

  date <- xpathSApply(doc_parse,"//span[@class='date']",xmlValue)

  main <- xpathSApply(doc_parse,"//div[@class='list_content']/div[3]",xmlValue)

  

  stock_data <-cbind(title,nick,theme,date,main)

  stock_data

  return(stock_data)

}



gc()

DATA<-NULL

StartPage <- 1

EndPage <- 10

for (i in StartPage:EndPage) {

  getData<-BlogData(i) 

  DATA<-rbind(DATA,getData)

}




# 네이버 블로그 10페이지까지의 데이터에서 본문요약만 간추려 워드클라우드 그리기


# install.packages('KoNLP')

library(KoNLP)

useNIADic()

library(stringr)


# 가능한한 세종사전보다 NIA사전을 활용하는 것이 단어가 풍부

# 사전등록 방법

buildDictionary(ext_dic = "woorimalsam", user_dic=data.frame(c("국민은행","우리은행","KEB은행"), "ncn"),replace_usr_dic = F)


DATA1 <- as.data.frame(DATA )

word <-paste(DATA1$main,collapse=" ")


nouns <- sapply(word,extractNoun,USE.NAMES = F)

nouns <-unlist(nouns)


nouns <- nouns[nchar(nouns)>=2]


nouns <- gsub(" ","", nouns)

nouns <- gsub("<.+?>|\t", "", nouns)

nouns <- gsub("\\d+","" ,nouns)

nouns <- gsub("\\.","" ,nouns)

nouns <- gsub("은행","" ,nouns)

nouns <- gsub("나무","" ,nouns)


wordFreq <- table(nouns)

aa <-sort(wordFreq,decreasing = T)

cc <- head(aa,30)


barplot(cc,las=2)




# 워드 클라우드 그리기

#install.packages("RColorBrewer")

#install.packages("wordcloud")

library(wordcloud)

library(RColorBrewer)


palete <- brewer.pal(8,"Set2")


windowsFonts(malgun=windowsFont("맑은 고딕"))


wordcloud(words=names(wordFreq),freq = wordFreq,  min.freq = 5,random.order = F,random.color=T, colors=palete, family="malgun")



########### wordcloud2


install.packages("wordcloud2")

library(wordcloud2)


wordcloud2(data=aa, minSize = 5,  minRotation=0, maxRotation =0,  fontFamily='맑은 고딕',size=3, shape='pentagon')