Skip to content

사용 예시

Chan-Yub Park edited this page Jul 27, 2017 · 9 revisions

카테고리별 뉴스 수집 예시(v0.0.2)

if (!require('devtools')) install.packages('devtools')
devtools::install_github('forkonlp/DNH4')
library(DNH4)

# 메인 카테고리 id 가져옵니다.
cate<-getMainCategory()
# 예시를 위해 하나만 선택합니다.
# 여기는 society를 선택했습니다.
tcate<-cate$url[1]
# 정치의 세부 카테고리를 가져옵니다.
subCate<-cbind(url1=tcate,getSubCategory(categoryUrl=tcate))
# 그중에 1번째, 2번째 세부 카테고리를 정했습니다.
tscate<-subCate$url[1:2]

# 목표 날짜를 지정합니다.
strDate<-"20160101"
endDate<-"20160102"

strTime<-Sys.time()
midTime<-Sys.time()

for (date in strDate:endDate){
  for (url1 in tcate){
    for (url2 in tscate){
      urlm<-gsub("/","",url1)
      urls<-gsub("/","",url2)
      
      print(paste0(date," / ",urlm," / ",urls ," / start Time: ", strTime," / spent Time: ", Sys.time()-midTime," / spent Time at first: ", Sys.time()-strTime))
      midTime<-Sys.time()
      
      # 뉴스 리스트 페이지의 url을 sid1, sid2, date로 생성합니다.
      pageUrl<-paste0("http://media.daum.net/breakingnews",url1,url2,"?regDate=",date)
      # 리스트 페이지의 마지막 페이지수를 가져옵니다.
      max<-getMaxPageNum(pageUrl)
      
      for (pageNum in 1:max){
        print(paste0(date," / ",urlm," / ",urls," / ",pageNum, " / start Time: ", strTime," / spent Time: ", Sys.time()-midTime," / spent Time at first: ", Sys.time()-strTime))
        midTime<-Sys.time()
        # 페이지넘버를 포함한 뉴스 리스트 페이지의 url을 생성합니다.
        pageUrl<-paste0("http://media.daum.net/breakingnews",url1,url2,"?regDate=",date,"&page=",pageNum)
        # 뉴스 리스트 페이지 내의 개별 다으 뉴스 url들을 가져옵니다.
        newsList<-getUrlListByCategory(pageUrl)
        newsData<-c()
        
        # 가져온 url들의 정보를 가져옵니다.
        for (i in 1:nrow(newsList)){
          print(paste0("get content : ",i ," / ",nrow(newsList)))
          # 불러오기에 성공할 때 까지 반복합니다.
          tem<-try(getContent(newsList$news_links[i]), silent = TRUE)
          while(class(tem)=="try-error"){
            tem<-try(getContent(newsList$news_links[i]), silent = TRUE)
            print(paste0("try again: ",newslink))
          }
          if(class(tem$datetime)[1]=="POSIXct"){
            newsData<-rbind(newsData,tem)
          }
        }
        
        dir.create("./data",showWarnings=F)
        # 가져온 뉴스들(보통 한 페이지에 17개의 뉴스가 있습니다.)을 csv 형태로 저장합니다.
        write.csv(newsData, file=paste0("./data/news_",urlm,"_",urls,"_",date,"_",pageNum,".csv"), row.names = F, fileEncoding="UTF-8")
      }
    }
  }
}


Clone this wiki locally