R/강의복습

[22.08.25] Selenium(셀레니윰) 활용해서 데이터 크롤링하기

peach_h 2022. 9. 4. 18:56
셀레니윰 설치하기

https://blog.naver.com/bb_/222637214732

 

[Python] 파이썬 자동화 기초 : 웹 브라우저 제어, 크롬 자동화, 셀레니움(selenium) 명령어 모음

[Python] 파이썬 자동화 기초 : 웹 브라우저 제어, 크롬 자동화, 셀레니움(selenium) 명령어 모음 파이썬...

blog.naver.com

위 블로그를 참고하여 설치하였다. 설명이 친절하다 !

 

 

셀레니윰 실행하기

1. 셀레니윰 설치후, 셀레니윰이 있는 폴더에서 cmd를 열어준다.

2.  cmd창에

" java -Dwebdriver.gecko.driver="geckodriver.exe" -jar selenium-server-standalone-4.0.0-alpha-1.jar -port 4445 " 를 입력한다

3. 코드를 실행시킨다

※ 주의 : 절대 cmd 창을 끄지말것!!

 

install.packages("RSelenium")
library(RSelenium)
remDr <- remoteDriver(remoteServerAddr = "localhost",
                     port = 4445, browserName = "chrome")
remDr$open()

chrome 창이 오픈된다 ! 

 

 

# 브라우저에서 페이지 이동하기
remDr$navigate("http://www.google.com")

이렇게 지정한 홈페이지로 이동시킬 수 있다.

 

 

 

구글에 PYTHON 검색시키기
# 컨텐츠 추출하기
# name = q -> 검색창
webElem <- remDr$findElement(using="css selector", "[name='q']")

# input 태그에 검색어를 입력한다 / 검색창에 python이라고 쓰고나서 엔터키를 눌러라
webElem$sendKeysToElement( list("PYTHON", key="enter"))

 

도대체 " name = q " 가 무슨 뜻일까 !! 했는데 google의 css에서 name= q가 검색창이였다..

검색시키기위해 검색창을 찾은것 !!

css는 홈페이지의 겉모습 ? 정도로 이해했다.

 

 

 

열린 홈페이지에서 자동으로 PYTHON이 검색 된 모습 !

 

 

 

네이버에서 검색하기
# 네이버로 이동후 검색어 입력하기
remDr$navigate("http://www.naver.com")

# id가 있을 경우id로 접근할 때
webElem <- remDr$findElement(using="css selector", "#query")

webElem$sendKeysToElement( list("PYTHON", key="enter"))

네이버는 #query로 검색창을 찾을 수 있나보다

 

 

 

 

셀레니윰으로 네이버 웹툰 댓글 크롤링하기
네이버 웹툰 댓글 들어가기
url <-"http://comic.naver.com/comment/comment?titleId=712362&no=184"
remDr$open()
remDr$navigate(url)

 

 

전체 댓글 누르기
# 전체 댓글 누르기
more <- remDr$findElement(using="css selector", 
                          "#cbox_module > div > div.u_cbox_view_comment > a > span.u_cbox_in_view_comment")
more$getElementText()
more$clickElement()
#cbox_module > div > div.u_cbox_view_comment > a > span.u_cbox_in_view_comment

 

 

댓글 내용 가져오기
# 댓글 내용 가져오기
re <- remDr$findElements(using="css selector","span.u_cbox_contents")
comment <- sapply(re, function(x){x$getElementText() })
comment <- unlist(comment)
comment

 

 

댓글 페이지 이동하기
# 페이지 이동하기
for (i in 4:12){
  nextCss <- paste0("#cbox_module > div > div.u_cbox_paginate > div > a:nth-child(", i, ") >span")
  print(nextCss)
  nextPage <- remDr$findElement(using="css selector", nextCss)
  nextPage$clickElement()
  # 시간 지연 필요 / 2초 대기
  Sys.sleep(2)
}

실행하면 혼자서 페이지가 이동한다.

 

 

 

10페이지 까지 댓글 다 모아오기

 

위에서 만든 코드들을 다합쳐서 10페이지 댓글 내용을 가져오자 !

 

# 10페이지 까지 댓글 가져오기
url<-"http://comic.naver.com/comment/comment?titleId=712362&no=184"
remDr$open()
remDr$navigate(url)

# 1. 전체 댓글 보기 클릭
more <- remDr$findElement(using="css selector", 
                          "#cbox_module > div > div.u_cbox_view_comment > a > span.u_cbox_in_view_comment")
more$getElementText()
more$clickElement()

dataList <- NULL
# 페이지 이동하기
for (i in 4:12){
  nextCss <- paste0("#cbox_module > div > div.u_cbox_paginate > div > a:nth-child(", i, ") >span")
  print(nextCss)
  nextPage <- remDr$findElement(using="css selector", nextCss)
  if( length(nextPage)==0) #10페이지 못넘어 가는 경우도 있음 
    break 
  nextPage$clickElement()
  # 시간 지연 필요 / 2초 대기
  Sys.sleep(2)
  
  re <- remDr$findElements(using="css selector","span.u_cbox_contents")
  comment <- sapply(re, function(x){x$getElementText() })
  comment <- unlist(comment)
  dataList <- c(dataList, comment)
}

dataList

약 135개의 댓글이 수집되었다 !

 

 

 

 

 

 

~ 오늘의 공부후기 ~

셀레니윰이라는 신기한 것을 배웠다 !
웹페이지가 혼자 작동하는 것이 참 신기했다.
이런걸로 혼자 돌아가는 매크로를 만드는 건가?? 싶었다