R 초보도 할 수 있는 Selenium을 이용한 크롤링
1 R Selenium
Selenium 은 automates browsers 입니다. R Selenium 은 결국 R 에서 사용하는 R Selenium입니다.
그런데 왜 셀레니움을 쓰나? 정확도가 가장높습니다. 다른 방식은 때로는 화면을 크롤링하지 못하는 경우도 있습니다.
이에 셀레니움은 이런 문제가 없습니다.
2 사용 코드
library(RSelenium)
remDr <- remoteDriver(port = 4445L, browserName="chrome")
remDr$open()
remDr$navigate(paste0("https://www.daum.net/"))
test<-remDr$findElement(using="xpath", value='//*[@id="news"]/div[1]/div/ul/li[1]')
test$getElementText()
<Error>
간단히 사용 코드를 적어봤습니다. 이대로 실행해봐야 현재는 실행되지 않습니다. (RSelenium package 를 설치해도 아직 되지 않습니다~)
코드 자체는 생각보다 쉽죠? 그런데 이를 위해선 몇가지 이해해야하는 내용이 있습니다.
- HTML
HTML은 인터넷 웹페이지를 만드는 언어라고 보시면 됩니다.
- xpath
XML Path Language 의 약자로 결국 HTML 의 연장선 상의 언어가 XML인데 XML방식으로 쓰여진 각 요소와 속성의 값을 찾을 수 있는 표현식입니다.
말하자면 상대적인 주소 같은 거죠.
- Web Driver & Docker
마지막으로 Web Driver 와 도커인데요.
과거 셀레니움은 Web Browser 에서 지원해주는 Driver 를 이용해 브라우저 화면을 띄워서 사용했습니다. (그게 Web Driver. 크롬이면 크롬driver.jar 가 있었던거죠.)
그런데 최근에 도커를 이용해 브라우저를 다루는 방식으로 바뀐 것 같습니다.
도커 설명이 주가 아니기 때문에 간단히 설명드리면 새로운 프로그램 가동 방식입니다. 그러니 도커를 사용한다면 그에 맞게 수행하면됩니다.
이를 위해선 우선 인터넷 연결이 되어있어야 합니다.
RSelenium 구동 과정을 정리하면 다음과 같습니다.
도커를 가동해 크롬을 열 준비를 하고 (크롬 화면이 보이지는 않습니다만.)
library RSelenium을 가동시키고 내가 원하는 사이트를 열고(보이지는 않습니다..)
그 사이트의 html text를 읽어서 그 중에 내가 원하는 path를 찾아 데이터를 읽어서 가공하면 되는 것입니다.
3 도커 설치 & Selenium 설치
우분투의 경우 터미널에서
$curl -fsSL https://get.docker.com/ | sudo sh
명령어를 치면 도커 설치가 됩다.
다음으로 셀레니움 설치!
https://hub.docker.com/r/selenium/standalone-chrome/
들어가보시면 나오겠지만
터미널에서 다음을 수행합니다.
$docker pull selenium/standalone-chrome
설치후 항상 켜놔야 계속 크롤링이 가능해집니다. 참고로 Selenium 포트는 4444와 4445를 사용합니다.
container port는 4444, host port 는 4445 입니다.
$sudo docker run -p 4445:4444 selenium/standalone-chrome (컴퓨터 리붓하면 실행시켜줘야합니다.)
이러면 끝입니다. 준비는 다 된것이죠.
4 내가 원하는 데이터 그리고 그 위치 알아오기
그럼 이제 Chrome을 킵니다.