Big Data/R Programming
1. 네이버 뉴스 웹크롤링
여동동
2021. 9. 27. 19:53
HTML값 가져오기
샘플 HTML
![]() |
크롤링 코드
## 패키지 설치 install.packages("rvest") install.packages("dplyr") install.packages('tidyverse') ## 패키지 불러오기 library(rvest) library(dplyr) library('tidyverse') ## n_page : 크롤링할 네이버 뉴스의 갯수 n_page = 100 ## page : 네이버 뉴스 dns주소가 뉴스페이지 번호마다 1 11 21 31 41 51 ~로 진행되어 이 같은 배열을 구성한다. page <- seq(1, n_page, 10) ## url_start : page번호가 중간에 있을경우 page번호를 비운상태에서 url_start와 url_end변수를 만든다. ## 이번에 만든 dns는 page번호가 맨뒤에 있어서 url_end가 필요 없다. url_start <- "https://search.naver.com/search.naver?where=news&sm=tab_pge&query=%EB%A7%9B%EC%A7%91&sort=0&photo=0&field=0&pd=0&ds=&de=&cluster_rank=156&mynews=0&office_type=0&office_section_code=0&news_office_checked=&nso=so:r,p:all,a:all&start=" ## url : dns주소와 page번호를 합친 최종 url rm(news_metadata_all) rm(news_metadata) news_metadata_all <- data.frame(title, date, press, url, contents) news_metadata <- data.frame(title, date, press, url, contents) tmp = 0 for(i in page) { url<- paste0(url_start, i) ## 기사 제목 title <-read_html(url) %>% html_nodes(".news_area > a") %>% html_attr('title') ## 기사 날짜 date <-read_html(url) %>% html_nodes(".info_group > span.info") %>% html_text() ## 기사 날짜와 같은 html조건에 3면 19TOP 이런식의 데이터들이 발견되어 제거함 name <- c("면") tmp <- grep(name,date) if(is.integer(tmp) && length(tmp) > 0) { date <- date[-grep(name,date)] } ## 언론사 명 press <-read_html(url) %>% html_nodes(".info_group > a") %>% html_text() ## 네이버 뉴스 소속은 한 기사당 언론사 이름이 2개가 크롤링되어 '네이버 뉴스'를 삭제한다. name <- c("네이버뉴스") tmp <- grep(name,press) if(is.integer(tmp) && length(tmp) > 0) { press <- press[-grep(name,press)] } ## 기사 URL targetUrl <-read_html(url) %>% html_nodes(".news_area > a") %>% html_attr('href') ## 기사 본문 contents <-read_html(url) %>% html_nodes(".dsc_wrap > a") %>% html_text() news_metadata <- data.frame(title = title, date = date, press = press, url = targetUrl, contents= contents) news_metadata_all <- rbind(news_metadata_all, news_metadata) } ##csv 생성 write.csv(news_metadata_all, "article.csv") message("success!!!") |