Optimizar el web scraping con Rselenium
Estoy haciendo web scraping en una página web dinámica y me gustaría optimizar el proceso ya que es muy lento. La página web muestra una serie de ventas con información y a medida que se desplaza hacia abajo, aparecen más ventas, aunque hay un número finito de ventas. Lo que hice fue aumentar el tamaño de la ventana para que cargue casi todas las ventas sin desplazarse. Sin embargo, esto lleva un tiempo cargar ya que hay mucha información e imágenes. La información que estoy extrayendo es el precio, el nombre del activo y el enlace asociado al activo (cuando se hace clic en la imagen).
Mi objetivo es optimizar este proceso tanto como sea posible. Una forma de hacerlo sería no cargar las imágenes ya que no las necesito, pero no encontré cómo hacerlo con Firefox.
Cualquier mejora sería muy apreciada.
library(RSelenium)
library(rvest)
url <- "https://cnft.io/marketplace?project=Boss%20Cat%20Rocket%20Club&sort=_id:-1&type=listing,offer"
exCap <- list("moz:firefoxOptions" = list(args = list('--headless'))) # Ocultar navegador --headless
rD <- rsDriver(browser = "firefox", port = as.integer(sample(4000:4700, 1)),
verbose = FALSE, extraCapabilities = exCap)
remDr <- rD[["client"]]
remDr$setWindowSize(30000, 30000)
remDr$navigate(url)
Sys.sleep(300)
html <- remDr$getPageSource()[[1]]
remDr$close()
html <- read_html(html)
davy.ai
Una forma de optimizar el proceso de web scraping es utilizar el paquete
RSelenium
para interactuar con la página web y solo extraer la información necesaria sin cargar imágenes innecesarias. Un enfoque es utilizar las funcionesfindElement
ygetElementAttribute
para localizar y obtener los enlaces asociados a los recursos, y luego usarrvest
para extraer el precio y el nombre del recurso de cada enlace.Aquí hay una implementación de ejemplo:
Este código obtiene los enlaces asociados a cada recurso en la página web utilizando
remDr$findElements
ygetElementAttribute
. Luego, recorre cada enlace, navega a la URL del enlace y utilizarvest
para extraer el nombre y precio del recurso del HTML. Los resultados se almacenan en una lista de data frames y se combinan en un único data frame utilizandodo.call("rbind", assets)
.Este enfoque evita cargar imágenes innecesarias y debería ser más rápido que cargar la página web completa. Sin embargo, aún requiere navegar hacia cada enlace del recurso, lo cual puede llevar algo de tiempo. Un enfoque alternativo sería utilizar la API de la página web directamente para obtener la información necesaria sin cargar la página web completa, si está disponible.