-
-
Notifications
You must be signed in to change notification settings - Fork 75
사용 예시 with setUrls
Chan-Yub Park edited this page Apr 28, 2017
·
3 revisions
여기에서 howdark님이 제안하신 setUrls 코드를 반영한 수집 코드 예시입니다. howdark님이 예시 코드도 제공해주셨고 아래와 같습니다. 감사합니다.
library(N2H4)
library(httr)
library(dplyr)
# 메인 카테고리 id 가져옵니다.
cate<-getMainCategory()
# 예시를 위해 하나만 선택합니다.
# 여기는 100(정치)를 선택했습니다.
tcate<-cate$sid1[1]
# 정치의 세부 카테고리를 가져옵니다.
subCate<-cbind(sid1=tcate,getSubCategory(sid1=tcate))
# 그중에 1번째, 2번째 세부 카테고리를 정했습니다.
tscate<-subCate$sid2[1:2]
# 목표 날짜를 지정합니다.
strDate<-"20160101"
endDate<-"20160101"
strTime<-Sys.time()
midTime<-Sys.time()
# 주어진 조건 값들의 모든 조합을 고려한 pageUrl을 생성합니다. (sid1 x sid2 x date)
urls <- setUrls(tcate, tscate, strDate, endDate)
# 라스트 페이지 탐색 및 페이지 수에 맞춰 pageUrl을 재생성하는 코드입니다.
sub_urls <- list()
for (url in urls){
print(paste0(url$date," / ", url$sid1," / ", url$sid2 ," / start Time: ", strTime," / spent Time: ", Sys.time()-midTime," / spent Time at first: ", Sys.time()-strTime))
midTime<-Sys.time()
# 리스트 페이지의 마지막 페이지수를 가져옵니다.
max<-getMaxPageNum(url$pageUrl)
# 기존에 주어진 조건 값 + page번호의 모든 조합을 고려한 pageUrl을 생성합니다. (sid1 x sid2 x date x page)
sub_urls <- c(sub_urls, setUrls(url$sid1, url$sid2, url$date, url$date, 1:max))
}
# 페이지 번호가 포함된 Url List에서 news data를 가져옵니다.
for (url in sub_urls){
print(paste0(url$date," / ",url$sid1," / ",url$sid2," / ",url$pageNum, " / start Time: ", strTime," / spent Time: ", Sys.time()-midTime," / spent Time at first: ", Sys.time()-strTime))
midTime<-Sys.time()
# 뉴스 리스트 페이지 내의 개별 네이버 뉴스 url들을 가져옵니다.
newsList<-getUrlListByCategory(url$pageUrl)
newsData<-c()
# 가져온 url들의 정보를 가져옵니다.
newsData <- lapply(newsList$links, function(x){
# 불러오기에 성공할 때 까지 반복합니다.
tem<-try(getContent(x), silent = TRUE)
while(class(tem)=="try-error"){
tem<-try(getContent(x), silent = TRUE)
print(paste0("try again: ",x))
}
if(class(tem$datetime)[1]=="POSIXct"){
# newsData<-rbind(newsData,tem)
return(tem)
}
})
# dplyr 패키지의 bind_rows 함수로 리스트로 저장된 데이터 프레임을 rbind 합니다.
newsData <- dplyr::bind_rows(newsData)
dir.create("./data",showWarnings=F)
# 가져온 뉴스들(보통 한 페이지에 20개의 뉴스가 있습니다.)을 csv 형태로 저장합니다.
write.csv(newsData, file=paste0("./data/news",url$sid1,"_",url$sid2,"_",url$date,"_",url$pageNum,".csv"),row.names = F)
}