R을 이용해 사용자 정의 함수 naver_news와 make_url 두개의 함수를 통해 네이버 뉴스를 크롤링 해보도록 하겠습니다!
naver_news의 경우 크롤링 하는데 들어갈 목록을 정의한 함수입니다.
저의 경우 신문사, 발행시간, 뉴스 기사, 링크를 df_news의 데이터 프레임 안에 넣어주었으며,
make_url은 키워드에 따라 상이한 url을 만들어주는 함수입니다.
naver_news = function(x) {
#x <- link
source = read_html(x, encoding = "UTF-8")
news_list = source %>%
html_nodes(xpath = '//*[@class="type01"]') %>%
html_nodes(xpath = '//*[@class=" _sp_each_title" or @class="_sp_each_url _sp_each_title"]')
news_list %>% html_text() -> news_title
news_list %>% html_attr("href") -> news_link
news_list %>%
html_nodes(xpath = '//*[@class="_sp_each_source"]') %>%
html_text() -> news_source
news_list %>%
html_nodes(xpath = '//*[@class="txt_inline"]') %>%
gsub(pattern = "<.*?", replacement = "") %>%
str_extract_all(pattern = "[0-9]{1,2}[가-힣]{1}.{1,4}전",
simplify = TRUE) -> news_time
df_news = data.frame(obs = 1:length(news_list),
source = news_source,
time = news_time,
time_collect = Sys.time(),
title = news_title,
link = news_link)
return(df_news)
}
make_url = function(x){
a = "https://search.naver.com/search.naver?where=news&sm=tab_jum&query="
x = URLencode(enc2utf8(x)) #한글로 입력되는 값을 utf-8으로 인코딩.
x = paste0(a, x)
return(x)
}
url = make_url("컴퓨터") #컴퓨터 자리에 키워드를 작성.
pop = naver_news(url)
pop
참고로 위 코드 중 ‘xpath’에 들어가는 @class는 네이버 뉴스의 html class 명입니다!
즉, html에 정의 되어있는 class를 활용한 크롤링이 되겠죠!
그렇다면 해당 class는 어떻게 확인할 수 있을까요?
저와 같이 키워드를 입력하고 뉴스 탭으로 이동합니다!
그곳에서 뉴스명 위에 마우스를 올리고 ‘오른쪽 클릭 -> Inspect(ctrl + shift + l)’ 하시면 오른쪽에 개발자 도구를 확인하실 수 있고 그곳에 빨간 동그라미 안의 내용을 이용하시면 됩니다!
그 후에 make_url 함수의 파라미터에 크롤링 하고 싶은 객체를 작성해서 넣으시면 됩니다~
꼭 네이버 뉴스가 아니더라도 이런 식으로 각종 사이트, 블로그를 활용할 수 있겠죠?
저의 경우 컴퓨터를 넣어서 돌려보면!
위와 같은 결과를 확인하실 수 있어요~
이를 통해 필요하신 것들을 정의하면 되겠죠?!ㅎㅎ
※본 내용은 멀티캠퍼스 ‘200224~’200228 ‘R좀 R려줘! R 데이터 분석 with Cloud’를 통해
학습한 내용을 기반으로 직접 작성한 내용입니다.
2020.02.27 – [개발] – [R좀 R려줘!] R gsub() 함수를 이용한 패턴 치환하기!
2020.02.27 – [일상] – 멀티캠퍼스 R좀 R려줘! R 데이터 분석 with Cloud 후기!!
2020.02.28 – [개발] – [R좀 R려줘!] R rbind(), colnames()를 활용한 하나의 data.frame() 만들기!
2020.02.28 – [개발] – [R좀 R려줘!] R unique(), nrow()를 활용한 언론사 별 트렌드 파악하기!
2020.02.28 – [개발] – [R좀 R려줘!] aggregate(), ggplot() 함수를 이용한 언론사별 뉴스기사 그래프 그리기!
2020.02.28 – [개발] – [R좀 R려줘!] R에서 자연어(NLP)처리를 해보자!
2020.02.28 – [개발] – [R좀 R려줘!] wordcloud2 패키지를 이용해 최다빈도 단어 추출하기!
2020.02.28 – [개발] – [R좀 R려줘!] 데이터 분석할때 반복문 진행 현황 확인하기!
2020.02.28 – [개발] – [R좀 R려줘!] 하나의 엑셀(Excel)에 담긴 정보를 특정 기준으로 여러 엑셀 파일로 나누고 합치기!
2020.02.28 – [개발] – [R좀 R려줘!] R을 이용하여 네이버 실시간 검색어, 인스타그램 검색 결과 크롤링 하기!!