본문 바로가기

정리/데이터 분석

[R] R 초보도 할 수 있는 Selenium을 이용한 크롤링

728x90
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 를 설치해도 아직 되지 않습니다~)

코드 자체는 생각보다 쉽죠? 그런데 이를 위해선 몇가지 이해해야하는 내용이 있습니다.

  1. HTML

HTML은 인터넷 웹페이지를 만드는 언어라고 보시면 됩니다.

  1. xpath

XML Path Language 의 약자로 결국 HTML 의 연장선 상의 언어가 XML인데 XML방식으로 쓰여진 각 요소와 속성의 값을 찾을 수 있는 표현식입니다.

말하자면 상대적인 주소 같은 거죠.

  1. 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을 킵니다.

Caption for the picture.

Caption for the picture.

잘 보일지 모르겠지만 크롬에서 원화는 화면을 키고 Ctrl+ Shift + i 를 누르면

위와 같은 개발자 툴이 뜹니다. 화면의 코드를 볼 수 있는데요.

특히 내가 긁어오고 싶은 Text를 마우스 우클릭하여 검사(inspect)하면 코드에 내가 원하는 화면에 해당하는 코드가 나옵니다.

그 대상을 다시 우클릭하고 Copy >> Copy xpath 하면 해당하는 Value를 가져올 수 있는 경로를 알려줍니다.

그 경로를 아래의 value 에 붙여넣기 하고 돌리면

test<-remDr$findElement(using=“xpath”, value=’//*[@id="news"]/div[1]/div/ul/li[1]’)

결과가 나옵니다.

5 정리

RSelenium을 이용하기 위해 필요한 내용을 정리하면

  1. docker 설치
  2. selenium docker 설치
  3. RSelenium 패키지 설치
  4. selenium docker 가동 (여러개 가동이 되기도 합니다. 첫 프로세스만 초기 설정 포트로 가동됩니다. 주의하세요. )
  5. RSelenium 패키지 가동
  6. 내가 원하는 화면의 xpath 알아오기
  7. xpath 기입후 결과 조회.

이 정도 겠네요. 크롤링하는 과정이 길긴 하지만 한번만 해놓으면 두고두고 쓸 수 있으니 잘 쓰시면 될 거 같습니다.

6 마치며

다음에는 RSelenium을 이용한 크롤링 작업 내용을 공유드리려 합니다. 그리고 다른 크롤링 방식도 찾아보려합니다. 감사합니다.