정보
-
업무명 : 특정 날짜의 네이버 뉴스 제목 크롤링
-
작성자 : 박진만
-
작성일 : 2020-11-26
-
설 명 :
-
수정이력 :
내용
[개요]
-
안녕하세요? 기상 연구 및 웹 개발을 담당하고 있는 해솔입니다.
-
원하는 날짜의 네이버 뉴스 기사의 제목을 스크래핑 하는 방법을 소개하고자 합니다.
[특징]
-
임의의 날짜를 지정한 후 해당 날짜에 작성된 네이버 뉴스의 제목을 가져오는 프로그램 설명
-
크롤링을 수행할 웹 페이지는 네이버 뉴스 속보 페이지임
-
페이지의 예시는 아래의 링크에서 확인 가능
[기능]
-
뉴스 기사 제목 크롤링 및 csv 파일 형태로 저장
[활용 자료]
-
없음
[자료 처리 방안 및 활용 분석 기법]
-
없음
[사용법]
-
소스 코드 예시 참조
[사용 OS]
-
Windows 10
[사용 언어]
-
R v4.0.2
-
R Studio v1.2.5033
소스코드 및 수행결과
[소스코드 설명]
-
인코딩 설정
Sys.setlocale("LC_ALL")
options(encoding = "UTF-8")
Sys.setenv(LANG = "en_US.UTF-8")
-
라이브러리 읽기
-
웹 스크래핑 관련 패키지인 rvest 이외에 데이터 전처리 관련 패키지 로드
-
library(rvest)
library(stringr)
library(tidyverse)
library(dplyr)
library(magrittr)
-
날짜 지정
- 시작날짜와 끝 날짜를 하루 간격으로 dtDate 변수에 지정
- 이후 지정된 Date 배열을 sDate에 character 타입으로 변환
dtDate = seq.Date(as.Date("2020-11-20"), as.Date("2020-11-21"), "1 day")
sDate = format(dtDate, "%Y%m%d")
-
URL 및 xpath 경로를 입력으로 받아 데이터를 가공하는 사용자 함수 생성
-
getUrlText : 지정된 xpath 경로의 Text 가공 후 추출
- getUrlGerf : 지정된 xpath 경로의 attribute 추출
-
getUrlText = function(url, xpath) {
xml2::read_html(url) %>%
rvest::html_nodes(xpath = paste0(xpath)) %>%
rvest::html_text() %>%
str_replace_all(pattern = "\n", replacement = " ") %>%
str_replace_all(pattern = "[\\^]", replacement = " ") %>%
str_replace_all(pattern = "\"", replacement = " ") %>%
str_replace_all(pattern = "\\s+", replacement = " ") %>%
str_trim(side = "both")
}
getUrlHref = function(url, xpath) {
xml2::read_html(url) %>%
rvest::html_nodes(xpath = paste0(xpath)) %>%
rvest::html_attr("href")
}
-
미리 설정한 날짜의 기사 제목을 데이터 형태로 크롤링 및 저장하는 루프문 수행
for (d in sDate) {
print(d)
url = sprintf("https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=%s&page=%d",d, seq(1:1500))
data = url %>%
purrr::map(~ getUrlText(.x, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')) %>%
unlist() %>%
as.data.frame()
dataL1 <- data %>%
magrittr::set_colnames("title") %>%
dplyr::distinct(title) %>%
dplyr::mutate(date = d)
write.csv(dataL1,paste0("./TITLE/2020/title_",d,".csv"),fileEncoding = "CP949")
}
[전체 코드 형태]
Sys.setlocale("LC_ALL")
options(encoding = "UTF-8")
Sys.setenv(LANG = "en_US.UTF-8")
library(rvest)
library(stringr)
library(tidyverse)
library(dplyr)
library(magrittr)
dtDate = seq.Date(as.Date("2020-11-20"), as.Date("2020-11-21"), "1 day")
sDate = format(dtDate, "%Y%m%d")
getUrlText = function(url, xpath) {
xml2::read_html(url) %>%
rvest::html_nodes(xpath = paste0(xpath)) %>%
rvest::html_text() %>%
str_replace_all(pattern = "\n", replacement = " ") %>%
str_replace_all(pattern = "[\\^]", replacement = " ") %>%
str_replace_all(pattern = "\"", replacement = " ") %>%
str_replace_all(pattern = "\\s+", replacement = " ") %>%
str_trim(side = "both")
}
getUrlHref = function(url, xpath) {
xml2::read_html(url) %>%
rvest::html_nodes(xpath = paste0(xpath)) %>%
rvest::html_attr("href")
}
for (d in sDate) {
print(d)
url = sprintf("https://news.naver.com/main/list.nhn?mode=LSD&mid=sec&sid1=001&date=%s&page=%d",d, seq(1:1500))
data = url %>%
purrr::map(~ getUrlText(.x, '//*[@id="main_content"]/div[2]/ul[*]/li[*]/dl/dt[2]/a')) %>%
unlist() %>%
as.data.frame()
dataL1 <- data %>%
magrittr::set_colnames("title") %>%
dplyr::distinct(title) %>%
dplyr::mutate(date = d)
write.csv(dataL1,paste0("./TITLE/2020/title_",d,".csv"),fileEncoding = "CP949")
}
[코드 수행 결과 예시]
참고 문헌
[논문]
- 없음
[보고서]
- 없음
[URL]
- 없음
문의사항
[기상학/프로그래밍 언어]
- sangho.lee.1990@gmail.com
[해양학/천문학/빅데이터]
- saimang0804@gmail.com
'프로그래밍 언어 > R' 카테고리의 다른 글
[R] 구글 번역 API 및 R 프로그램을 이용하여 마인크래프트 1.12.1 모드 파일 자동으로 번역 후 적용하기 (구글 API 신청 방법 포함) (0) | 2020.12.28 |
---|---|
[R] '끄투코리아' 사이트를 매개체로 한 강화학습을 통한 끝말잇기 봇 프로그램의 학습 알고리즘 구현 및 테스트 (0) | 2020.11.28 |
[R] 한국 주요 좌표계에 대한 proj4 인자 및 지도 예시 (0) | 2020.10.25 |
[R] 네이버 네모네모로직 사이트 퍼즐 크롤링 및 해결 프로그램 (2) | 2020.10.24 |
[R] R 및 Python을 이용한 '디시인사이드' MBTI 갤러리 웹 크롤링 및 키워드 분석을 통한 워드 클라우드 생성 (1) | 2020.05.23 |
최근댓글