Estimados Estoy aprendiendo, concretamente RSelenium me parece una buena opción puesto que hay otras que no están en todos los sistemas operativos, y trato de escribir independiente del sistema.
Necesitaría si no es molestia que corran un código R y analizar si se repite el siguiente error. > todo_javier<-lapply(nombres_ddoo_grep_javier,leer) Error in tabla[[1]] : subscript out of bounds Error in tabla[[1]] : subscript out of bounds Error in tabla[[1]] : subscript out of bounds Error in tabla[[1]] : subscript out of bounds Error in tabla[[1]] : subscript out of bounds Copio y pego el código original, o casi porque tiene pequeñas anotaciones personales para aprender. ######################################################### # # Jorge Ayuso Rejas # Open Analytics 2014 # https://github.com/jayusor/openanalytics_2014 # ######################################################### rm(list = ls());gc() library(RCurl) library(RSelenium) library(XML) library(data.table) library(parallel) url<-"http://www.verema.com/vinos/portada" checkForServer() Sys.sleep(.5) startServer() Sys.sleep(2) parsear_tablas<-function(j){ doc<-getURI(j) error<-1 intentos<-0 while(error==1 & intentos<10){ tabla<-readHTMLTable(doc ,stringsAsFactors = FALSE, encoding="UTF-8",header = TRUE) if(!inherits(try(tabla[[1]]), "try-error") ) error<-0 intentos<-intentos+1 } if(inherits(try(tabla[[1]]), "try-error") ) return() if(is.null(tabla)|length(tabla)==0|is.null(tabla[[1]])) return() tabla<-try(tabla[[1]]) if(length(tabla)<2) return(NULL) tabla$Vino<-gsub("\\n\\(function.*$","",tabla$Vino) cual<-grep("Anterior.*Siguiente",tabla$Vino) if(length(cual)>0) tabla<-tabla[-cual,] return(as.data.table(tabla)) } leer<-function(i){ firefox$navigate(url) Sys.sleep(2) firefox$findElement("xpath",paste0('//*[@id="producto_ddoo_id"]/option[.=\'',i,'\']'))$clickElement() Sys.sleep(1) firefox$findElement("xpath",'//*[@id="leftflex-cell-col300"]/div/div[1]/div/form/input[4]')$clickElement() url_ddoo<-firefox$getCurrentUrl()[[1]] vinos_total<-firefox$findElement("xpath",'//*[@id="leftflex-cell-col300"]/h1/span') vinos_total<-as.numeric(gsub("^\\W*([0-9]+).*$","\\1",vinos_total$getElementText()[[1]])) if(inherits(try(vinos_total==0), "try-error")|is.na(vinos_total) ) browser() if(vinos_total==0) return() if(vinos_total>50){ if(vinos_total>500){ url_ddoo<-paste0(url_ddoo,apply(expand.grid(1:7,1:10),1,function(x) paste0("&rango_precio=",x[1],'&page=',x[2]))) }else{ url_ddoo<-paste0(url_ddoo,paste0("&page=",1:ceiling(vinos_total/50))) } } url_ddoo<-gsub("&page=1$","",url_ddoo) # zoom<-mclapply(url_ddoo,parsear_tablas,mc.cores = 6) #mclapply solo funciona en linux/unix poner lapply zoom<-lapply(url_ddoo,parsear_tablas) #mclapply solo funciona en linux/unix poner lapply zoom<-rbindlist(zoom) if(length(zoom)==0) return() zoom$DO<-i return(zoom) } firefox <- remoteDriver() # firefox <- remoteDriver(browserName = "phantomjs") firefox$open() firefox$navigate(url) ddoo<-firefox$findElements("xpath",'//*[@id="producto_ddoo_id"]/option') Sys.sleep(3) datosddoo<- ddoo datosddoo summary(datosddoo) str(datosddoo) datosddoo$getElementText #nombres_ddoo<-sapply(ddoo,function(x) x$getElementText()) #nombres_ddoo<-do.call(c,nombres_ddoo) #nombres_ddoo<-nombres_ddoo[grep("^España",nombres_ddoo)] nombres_ddoo_javier<-sapply(datosddoo,function(x) x$getElementText()) nombres_ddoo_javier # #################### los pasa de esta forma #[[166]] #[1] "Australia - Yenda" # #[[167]] #[1] "Argentina - Mendoza" # ###################### a esta otra forma #[1] "Todos" #[2] "España - D.O. Abona" #[3] "España - D.O. Alella" nombres_ddoo_docall_javier<-do.call(c,nombres_ddoo_javier) nombres_ddoo_docall_javier # toma los de España con grep nombres_ddoo_grep_javier<-nombres_ddoo_docall_javier[grep("^España",nombres_ddoo_docall_javier)] nombres_ddoo_grep_javier # todo<-lapply(nombres_ddoo,leer) todo_javier<-lapply(nombres_ddoo_grep_javier,leer) todo_javier ## eeeeerrrrrooooorrrrrrr firefox$close() firefox$closeServer() todo<-rbindlist(todo) # save(todo,file=paste0(Sys.Date(),"_vinos.Rdata")) El 16 de febrero de 2015, 18:59, Carlos Ortega <[email protected]> escribió: > Hola, > > Tienes una presentación sobre esto que hizo Gregorio Serrano en el Grupo > de Madrid: > http://madrid.r-es.org/martes-20-mayo-de-2014/ > "Webscrapping with el paquete Relenium" > > Y otra alternativa es utilizar RSelenium: > > http://cran.r-project.org/web/packages/RSelenium/vignettes/RSelenium-basics.html > > Saludos, > Carlos Ortega > www.qualityexcellence.es > > El 16 de febrero de 2015, 20:13, <[email protected]> > escribió: > >> Estimados >> >> >> Les consulto por lo siguiente, incluso creo que de esto se habló en una >> oportunidad en esta lista, por ese motivo cualquier sugerencia es >> bienvenida. >> >> >> Hay algo de información que me hace falta para un trabajo, pero esta no >> es de una única fuente, y desconozco si brindan los registros, pero lo que >> es accesible son los sitios web donde estas fuentes publican un formulario >> HTML simple, la respuesta es otro HTML simple, luego puede ser otro HTML >> simple con algunas tablas. Es decir, algo de información hay pero necesita >> de trabajo, nada que un script y consultas automatizadas junto a una base >> de datos y un excelente diseño no pueda lograr. >> >> >> Una alternativa podría ser el siguiente paquete >> http://cran.r-project.org/web/packages/httr/index.html (como otros tanto >> que tendría que estudiar), o simplemente curl, tengo que organizar desde el >> inicio. >> >> >> >> ¿Alguna sugerencia o recomendación? >> >> >> Recuerdo que yo mismo participe en debates sobre como tomar información >> desde internet a R, pero como hace un tiempo no uso esa tecnología, puedo >> estar muy desactualizado. >> >> >> Javier Marcuzzi >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> R-help-es mailing list >> [email protected] >> https://stat.ethz.ch/mailman/listinfo/r-help-es >> > > > > -- > Saludos, > Carlos Ortega > www.qualityexcellence.es > [[alternative HTML version deleted]] _______________________________________________ R-help-es mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-help-es
