디블로터

디블로터

네이버 주요뉴스 기사배열이력 스크랩

참고기사 : [디블로터] ⑨네이버가 좋아하는 뉴스, 분석해보니

링크 : 네이버 기사배열 이력 페이지

#다음 두 패키지가 미리 설치 되어 있어야 합니다.
#패키지를 설치 하지 않은 경우 다음 명령어를 콘솔에 입력해서 패키지를 설치해주세요.
#install.packages('dplyr')
#install.packages('rvest')

#rvest 패키지는 Windows 운영체제에서는 정상적으로 작동하지 않을 수 있습니다.

library(dplyr)
library(rvest)

#기사배열 이력 데이터를 담을 벡터를 미리 생성한다.
#기사배열 이력 페이지에는 포토, 리스트 형태의 두가지 섹션이 있다.
#스크랩이 완료되면 데이터를 합하겠지만 그전에 두 데이터를 나누어서 벡터를 만들어 준다.
news_list_photo_data = c();
news_list_text_data = c();

#2015년 11월 1일부터 30일까지 각 페이지의 데이터를 가져오기 위해 반복할 범위를 정의한다.
days_range <- seq(from=as.Date('2015-11-01'), to=as.Date("2015-11-30"),by='days' )
for ( i in seq_along(days_range) ){
  news_arrange_list_date = days_range[i];
  news_arrange_list_url = 'http://news.naver.com/main/history/mainnews/list.nhn'
  news_list_date_page_url = paste(news_arrange_list_url,news_arrange_list_date,sep="?date=")
  
  news_list_date_page = read_html(news_list_date_page_url)
  
  #포토기사의 페이지수를 구한다.
  news_list_date_page_photo_count = strsplit(
    news_list_date_page %>% html_nodes('.edit_history_list .eh_navi .eh_page') %>% html_text(trim = TRUE),
    '/')[[1]][2]
  
  #리스트 기사의 페이지수를 구한다.
  news_list_date_page_text_count = strsplit(
    news_list_date_page %>% html_nodes('.mtype_list_wide .eh_navi .eh_page') %>% html_text(trim = TRUE),
    '/')[[1]][2]
  
  
  #상단 포토뉴스 리스트
  for(i in 1:news_list_date_page_photo_count){
    #위에서 구한 포토기사의 페이지수만큼 반복하면서 데이터를 스크랩하고 벡터에 바인딩한다.
    news_list_photo_url = 'http://news.naver.com/main/history/mainnews/photoTv.nhn'
    news_list_photo_full_url<-paste(news_list_photo_url,news_arrange_list_date,sep="?date=")
    news_list_photo_full_url<-paste(news_list_photo_full_url,i,sep="&page=")
    
    news_list_photo_part = read_html(news_list_photo_full_url, encoding = 'EUC-KR')
    news_list_photo_part_item = news_list_photo_part %>% html_nodes('.edit_history_lst li')
    
    #각 페이지 마다 2개 이상의 기사가 있기 때문에 기사의 메타정보를 얻기위해서 기사수만큼 반복해서 데이터를 구한다.
    for(y in 1:length(news_list_photo_part_item)){
      
      news_list_photo_item_link = iconv( news_list_photo_part_item[y] %>% html_node('a') %>% html_attr('href'), 'EUC-KR', 'UTF-8')
      news_list_photo_item_title = news_list_photo_part_item[y] %>% html_nodes('.eh_tit') %>% html_text()
      news_list_photo_item_press = news_list_photo_part_item[y] %>% html_nodes('.eh_by') %>% html_text()
      news_list_photo_item_time = news_list_photo_part_item[y] %>% html_nodes('.eh_time') %>% html_text()
      
      news_list_photo_data <- rbind(
        news_list_photo_data,
        c(news_list_photo_item_title, news_list_photo_item_press, news_list_photo_item_time, news_list_photo_item_link)
      )
    }
  }
  
  #리스트 목록 뉴스
  for(e in 1:news_list_date_page_text_count){
    news_list_text_url = 'http://news.naver.com/main/history/mainnews/text.nhn'
    news_list_text_full_url<-paste(news_list_text_url,news_arrange_list_date,sep="?date=")
    news_list_text_full_url<-paste(news_list_text_full_url,e,sep="&page=")
    
    news_list_text_part = read_html(news_list_text_full_url, encoding = 'EUC-KR')
    news_list_text_part_item = news_list_text_part %>% html_nodes('.mlist2 li')
    
    for(h in 1:length(news_list_text_part_item)){
      
      news_list_text_item_link = news_list_text_part_item[h] %>% html_node('a') %>% html_attr('href')
      news_list_text_item_title = news_list_text_part_item[h] %>% html_nodes('a') %>% html_text(trim = TRUE)
      news_list_text_item_press = news_list_text_part_item[h] %>% html_nodes('.writing') %>% html_text()
      news_list_text_item_time = news_list_text_part_item[h] %>% html_nodes('.eh_edittime') %>% html_text()
      
      news_list_text_data <- rbind(
        news_list_text_data,
        c(news_list_text_item_title, news_list_text_item_press, news_list_text_item_time, news_list_text_item_link)
      )
    }
  }
}

* 데이터 정제는 엑셀을 활용했습니다. 위에서 스크랩한 데이터에 추가적인 정제가 필요합니다.

11월 네이버 주요뉴스 배열이력

11월 네이버 주요뉴스 배열

언론사 :

노출 시간 총합 :