F12 -> Network -> Name 에서 Request URL 못 찾을 때
반응형 웹사이트(made by 자스)
selenium
: 웹브라우저를 컨트롤하여 웹을 자동화하는 프로그램
1. chrome driver 다운로드
도움말>크롬정보
Chrome이 최신 버전입니다.
버전 98.0.4758.82(공식 빌드) (64비트)
https://chromedriver.chromium.org/downloads
맞는 버전(최대한 비슷한 버전) 다운로드
2. selenium jar file 다운로드
(chrome driver랑 같은 위치에 있어야함)
selenium-server-standalone-4.0.0-alpha-1.jar
3. 설치(in R)
install.packages("RSelenium")
library(RSelenium)
4. cmd(관리자권한 실행) 창에서 실행
(계속 실행하고 있어야 함)
cd c:/data
java -Dwebdriver.chrome.driver="chromedriver.exe" -jar selenium-server-standalone-4.0.0-alpha-1.jar -port 7777
remdr <- remoteDriver(remoteServerAddr='localhost',port=7777,browserName='chrome')
remdr$open() #크롬 켜기
remdr$navigate("https://www.naver.com") #네이버켜기
remdr$findElement(using='css',value='body')$sendKeysToElement(list(key='end')) #스크롤 가장 아래
remdr$findElement(using='css',value='body')$sendKeysToElement(list(key='home')) #스크롤 가장 위로
remdr$findElement(using='css',value='body')$sendKeysToElement(list(key='down_arrow')) #스크롤 조금씩 아래로
remdr$findElement(using='css',value='body')$sendKeysToElement(list(key='up_arrow')) #스크롤 조금씩 위로
remdr$close() #크롬창 닫기
remdr$screenshot(display = T) #R viewer로 보기
#검색창 찾아서 검색하기
remdr$navigate("https://search.naver.com/search.naver?where=image") #검색할 페이지
id <- remdr$findElement(using='id',value = 'nx_query') #검색창 찾기
id$setElementAttribute('value', '강아지') #강아지 입력
btn <- remdr$findElement(using='class',value = 'bt_search') #검색버튼 찾기
btn$clickElement() #검색버튼 클릭
#스크롤 반복하기
for(i in 1:5){
remdr$findElement(using='css',value = 'body')$sendKeysToElement(list(key='end'))
Sys.sleep(2)
}
이미지 다운로드
1. static 웹사이트
library(rvest)
html <- read_html("https://movie.naver.com/movie/bi/mi/basic.naver?code=191547")
#사진 주소 저장
img <- html_nodes(html,xpath='//*[@id="content"]/div[1]/div[2]/div[2]/a/img')%>%
html_attr('src')
#img <- html_nodes(html,'div.poster>a>img')%>%html_attr('src')
#다운로드
download.file(img,destfile = "c:/data/1.jpg",mode = 'wb') #이미지는 wb 모드
2. dynamic 웹사이트
selenium을 이용해서 네이버 이미지 검색 후 다운로드
remdr <- remoteDriver(remoteServerAddr='localhost',port=7777,browserName='chrome')
remdr$open()
remdr$navigate("https://search.naver.com/search.naver?where=image") #검색할 페이지
id <- remdr$findElement(using='id',value = 'nx_query') #검색창 찾기
id$setElementAttribute('value', '강아지') #강아지 입력
btn <- remdr$findElement(using='class',value = 'bt_search') #검색버튼 찾기
btn$clickElement() #검색버튼 클릭
#스크롤 반복하기(사진 더 많이 받기)
for(i in 1:5){
remdr$findElement(using='css',value = 'body')$sendKeysToElement(list(key='end'))
Sys.sleep(2)
}
#소스받기!!필수!!
source <- remdr$getPageSource()[[1]]
html <- read_html(source) #소스내용 변환
remdr$close()
#사진 주소 저장
img <- html_nodes(html,xpath='//*[@id="main_pack"]/section[2]/div/div[1]/div[1]/div/div/div[1]/a/img')%>%
html_attr('src')
#다운로드
for(i in 1:5){
download.file(img[i],destfile = paste0("c:/data/dog_",i,".jpg"),mode = 'wb')
}
try()
: 예외상황(실행 중에 발생한 오류)이 발생했을 때 처리하는 기능
lst <- list(x=10,y='20',z=30)
for(i in lst){
try(print(100/i))
}
for(i in lst){
try(print(100/i),silent=T) #silent=T : 오류메세지 출력하지 않고 진행
}
tryCatch
: 에러파일 따로 저장
error_files <- c()
for(i in 1:5){
tryCatch(download.file(x[i],destfile = paste0("c:/data/image/dog",i,".jpg"),mode = 'wb'),
error=function(arg){error_files <<- c(error_files,x[i])})
}
#for문 밖에 있는 함수(global)에 for문 안(local)에서 넣을때 <<- 사용
[문제208] 다음 포털 이미지 검색에 검색어를 입력한 후 이미지 url을 수집한 후 이미지 파일을 저장해주세요.
remdr <- remoteDriver(remoteServerAddr='localhost',port=7777,browserName='chrome')
remdr$open()
remdr$navigate("https://search.daum.net/search?w=img")
id <- remdr$findElement(using='id',value = 'q')
id$setElementAttribute('value', '고양이')
btn <- remdr$findElement(using='id',value = 'daumBtnSearch')
btn$clickElement()
#더보기 버튼 클릭
for(i in 1:5){
webelem <- remdr$findElement(using = 'xpath',value='//*[@id="imgColl"]/div[5]/a[1]')
webelem$clickElement()
Sys.sleep(2)
}
source <- remdr$getPageSource()[[1]]
html <- read_html(source)
remdr$close()
img <- html_nodes(html,xpath='//*[@id="imgList"]/div/a/img')%>%
html_attr('src')
error_files <- c()
for(i in 1:length(img)){
tryCatch(download.file(img[i],destfile = paste0("c:/data/image/cat",i,".jpg"),mode = 'wb'),
error=function(arg)error_files <<- c(error_files,img[i]))
}
[문제209] 중앙일보에서 "인공지능" 뉴스기사의 url을 추출하세요.
remdr <- remoteDriver(remoteServerAddr='localhost',port=7777,browserName='chrome')
remdr$open()
remdr$navigate("https://www.joongang.co.kr/search/news?keyword=%EC%9D%B8%EA%B3%B5%EC%A7%80%EB%8A%A5")
#아래로 스크롤 후 더보기 버튼 클릭
for(i in 1:5){
remdr$findElement(using='css',value = 'body')$sendKeysToElement(list(key='end'))
article <- remdr$findElement(using = 'xpath',value='//*[@id="container"]/section/div/section/div/a')
article$clickElement()
Sys.sleep(2)
}
source <- remdr$getPageSource()[[1]]
html <- read_html(source)
remdr$close()
url <- html_nodes(html,xpath='//*[@id="container"]/section/div/section/ul/li/div[2]/h2/a')%>%
html_attr('href')
'R' 카테고리의 다른 글
[R] text mining (0) | 2022.02.15 |
---|---|
[R] 다나와 사이트 Web scrapling(selenium) (0) | 2022.02.15 |
[R] web scraping - css, xpath,JSON (0) | 2022.02.10 |
[R] 크롤링, 스크래핑 (0) | 2022.02.09 |
[R] 텍스트 마이닝 (0) | 2022.02.08 |