RSelenium으로 뉴스 헤드라인 수집
2019. 5. 6. 01:53ㆍR/Web Crawling

서비스를 제공하는 쪽에서 웹 크롤링을 차단을 하거나, 데이터가 동적으로 변하는 경우 기존 방법 대신에 RSelenium을 사용하면 손쉽게 데이터를 수집할 수 있다.
Selenium 설치 방법은 추후 업데이트 예정
1 2 3 4 5 6 7 8 9 10 11 | <code>library(RSelenium) library(rvest) library(tidyverse) remDR < - remoteDriver(remoteServerAddr = 'localhost' , port = 4445L , browserName = 'chrome' ) remDR$ open () < / code> |
위 명령어를 실행하면 크롬 창으로 네이버페이지가 자동으로 뜬다.
지금부터 R 스튜디오에 입력 후 실행하는 명령을 그대로 반영할 수 있다.

명령어를 사용하여 뉴스 버튼을 클릭해서 뉴스 페이지가 뜨도록 해보자
1 2 3 4 5 6 | <code> ######################################################### ## click to load news btn < - remDR$findElement(using = 'css selector' , value = '.an_a.mn_news' ) btn$clickElement() < / code> |
자동으로 뉴스 페이지가 로딩되는 것을 볼 수 있다. 뉴스 헤드라인 5개를 수집해보자

rvest패키지를 사용하면 일반적으로 read_html을 사용하여 xml정보를 수집할 수 있다.
그러나 일부 사이트에서는 해당 기능을 원천적으로 막는 경우가 있다.
이럴 때 RSelenium의 기능을 활용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <code> ## 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 < / code> |
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 |