Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- ISO26000
- 3컷만화
- 캐릭터그림
- 탄산칼슘
- 오늘부터차근차근아이패드드로잉
- 이런생각
- 기업의사회적책임
- 수칙
- 헌혈의중요성
- rvest
- 헌혈의집
- 여행가고싶다
- 환경사회지배구조
- 지질학
- 흔하지않은취미
- 경영평가
- 방해석
- 코로나19종식기원
- 사회적거리두기4단계
- 그림잘그려보고싶다
- 그리운제주도
- 사회적거리두기
- 보석
- csr
- 코로나19
- RStudio
- 초딩생각
- 책이름길다
- ESG
- 국제표준기구
Archives
- Today
- Total
하루다이제스트
rvest만 활용하여 R Studio로 신문사 일간 뉴스를 간단히 크롤링 해보자 본문
매일 일간지에서 헤드라인 뉴스를 보고 해야하는 업무가 주어진다면 어떻게 해야할까요?
얼마 전에 이와 같은 업무를 받은 적이 있어 네이버 뉴스로 들어가서 일일이 확인해 보다가
노안이 일찍 찾아 올 것만 같아.. 심플하게 만들어 보았습니다.
매일매일 아침에 뉴스가 업뎃 되니 출근하자 마자 돌리면 엑셀 완성..
주의: 날짜를 너무 길게 잡으면 부하가 발생할 수 있으니 3일이 적당(약 1000여개)
R과 R Studio 는 깔려 있다는 것을 전제로 합니다.
뉴스 사이트 방문: 네이버, 다음 다 좋아요
- 헤드라인 정보가 잘 나와있고 2) 일간지에 게재 되어있고 3) HTML 표준화가 잘 되어 있는 곳이면 어디든 상관없어요
0. 필요한 라이브러리 설정
library(rvest) ## URL 크롤링 라이브러리
library(writexl) ## 엑셀로 저장 라이브러리
library(stringr) ## 스트링 변환 라이브러리
1. R 스튜디오에서 한글이 깨지거나, 실행 시 경고 메시지가 나오는 것을 방지 하기 위해 로케일 값을 세팅을 해주세요.
(관련 해서 이것저것 다 해보았으나 이것이 직빵입니다 ㅎ)
Sys.setlocale('LC_ALL','korean')
2. URL, 신문사명, 신문사코드, 날짜 등 변수 설정
## 네이버 뉴스 헤드라인, 신문게재 기사 주소 중 oid(신문사코드)만 제외 하고 주소 설정
url <- "https://news.naver.com/main/list.naver?mode=LPOD&mid=sec&listType=paper&oid="
## 신문사명, 코드를 설정
org.name <- c("경향신문","국민일보","동아일보","문화일보","서울신문","세계일보","조선일보","중앙일보","한겨레","한국일보")
org.code <- c("032","005","020","021","081","022","023","025","028","469")
## 날짜를 설정(시작:끝)
date <- 20210726:20210726
## 결과 값을 가질 틀을 선언
result <- data.frame(신문사명="",코드="",날짜="",위치="",우선순위="",제목="",링크주소="")
3. 수집 코드
for (oi in org.code) {
for (dt in date) {
tmp.url <- paste(url,oi,"&date=",dt,sep="")
html <- read_html(tmp.url)
tt <- html_nodes(html,'#main_content') %>% html_nodes(css='.list_body')%>% html_nodes(css='.type13')
tmp.txt <- html_nodes(tt,xpath='li/dl/dt[last()]/a') %>% html_text()
tmp.link <- html_nodes(tt,xpath='li/dl/dt[last()]/a') %>% html_attr('href')
tmp.author <- html_nodes(tt,css='.writing') %>% html_text()
tmp.picon <- html_nodes(tt, css='.newspaper_info') %>% html_text()
tmp.date <- html_nodes(tt,css='.date') %>% html_text()
for(idx in 1:length(tmp.txt)) {
result <- rbind(result,c(신문사명=tmp.author[idx],코드=oi,날짜=dt,위치=tmp.picon[idx],우선순위=idx,제목=tmp.txt[idx],링크주소=tmp.link[idx]))
}
}
}
4. 결과치 확인 및 엑셀 저장
## 첫 행은 삭제
result <- result[-1,]
## 위치 신문면 값을 일치, 위치에서 [A] 또는 공백(" ") 또는 TOP를 찾아서 ""로 변환
result$위치 <- str_replace_all(result$위치,"[A]| |TOP","") %>% str_trim()
View(result)
write_xlsx(result,"신문크롤링+20210726.xlsx")
간단하게 끝~ 결과를 한번 볼까요?
- 신문사명: 신문사 결과
- 코드: 신문사 코드(URL로 호출시 사용)
- 날짜: 게재 날짜
- 위치: 신문1~10면 까지 위치 정보
- 우선순위: 게시물 순서로 해당 위치 정보
- 제목: 제목
- 링크주소: 신문URL 주소