RSelenium으로 뉴스 헤드라인 수집
2019. 5. 6. 01:53ㆍR/Web Crawling
서비스를 제공하는 쪽에서 웹 크롤링을 차단을 하거나, 데이터가 동적으로 변하는 경우 기존 방법 대신에 RSelenium을 사용하면 손쉽게 데이터를 수집할 수 있다.
Selenium 설치 방법은 추후 업데이트 예정
library(RSelenium)
library(rvest)
library(tidyverse)
remDR <- remoteDriver(remoteServerAddr = 'localhost',
port = 4445L,
browserName = 'chrome')
remDR$open()
remDR$navigate('http://naver.com')
위 명령어를 실행하면 크롬 창으로 네이버페이지가 자동으로 뜬다.
지금부터 R 스튜디오에 입력 후 실행하는 명령을 그대로 반영할 수 있다.
명령어를 사용하여 뉴스 버튼을 클릭해서 뉴스 페이지가 뜨도록 해보자
#########################################################
## click to load news
btn <- remDR$findElement(using = 'css selector', value = '.an_a.mn_news')
btn$clickElement()
자동으로 뉴스 페이지가 로딩되는 것을 볼 수 있다. 뉴스 헤드라인 5개를 수집해보자
rvest패키지를 사용하면 일반적으로 read_html을 사용하여 xml정보를 수집할 수 있다.
그러나 일부 사이트에서는 해당 기능을 원천적으로 막는 경우가 있다.
이럴 때 RSelenium의 기능을 활용할 수 있다.
## parsed top news
html <- remDR$getPageSource()[[1]]
parsed <- read_html(html)
hd.title <- parsed %>% html_nodes('.hdline_article_tit > a') %>% html_text() %>% as.tibble %>%
mutate(length = str_length(value)) %>% filter(length > 0) %>% select(-length) %>%
rename(title = value)
hd.url <- parsed %>% html_nodes('.hdline_article_tit > a') %>% html_attr('href') %>% as.tibble %>%
mutate(length = str_length(value)) %>% filter(length > 0) %>% select(-length) %>%
rename(url = value)
hd.top5 <- bind_cols(hd.title, hd.url)
hd.top5
getPageSource()를 사용하면 페이지 전체를 긁어오면서 read_html만 사용 했을 때 누락되었을 수도 있는 내용이 포함된다. 해당 소스에 read_html을 사용 하면 된다.
'R > Web Crawling' 카테고리의 다른 글
이미지 파일 일괄 다운로드 받기 (0) | 2019.04.27 |
---|---|
emart 매장 정보 얻기 (0) | 2019.04.26 |
a href에서 url 얻기 (0) | 2019.04.25 |
XPath를 활용한 베스트셀러 수집하기 (0) | 2019.04.25 |
Xpath를 활용한 MLB 타자 정보 수집 (0) | 2019.04.25 |