es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Creación de un bucle de webscraping en R.

Estoy intentando configurar un bucle de extracción de datos web en R, pero estoy realmente luchando para crear un bucle que funcione.

Actualmente tengo un archivo de Excel que contiene las URL relevantes que me gustaría extraer. Leo esto en R e intento usar una herramienta de extracción web para extraer el título del producto para cada URL que se encuentra actualmente en la columna titulada DE. Un ejemplo breve de la tabla es:

El código que he estado utilizando es:

library(readxl)
URL_creator <- read_excel("URL creator.xlsx")

library(rvest)
content_list <- vector()
for (i in 1:nrow(URL_creator)) {
  url <- URL_creator[i,]$DE
  html <- read_html(url)
  nodes <- html_nodes(html, "productTitle") %>% 
    html_text() %>% 
    gsub("\n", "", .) %>% 
    trimws()
  {    content_list[i] <- nodes
    }}

Por alguna razón, la lista de contenido devuelta está vacía. Esperaba que devolviera el título del producto para cada una de las URL correspondientes en la columna titulada DE, pero no estoy seguro de dónde me equivoqué.

Cualquier ayuda es muy apreciada 🙂

¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema puede estar en el selector específico que estás utilizando para extraer el título del producto. Es posible que no sea correcto para el sitio web que estás extrayendo.

    Una sugerencia sería inspeccionar el HTML del sitio web que estás intentando extraer utilizando la herramienta de inspección del navegador (haz clic derecho en el elemento y selecciona “Inspect Element”). Esto te permitirá identificar la etiqueta HTML o la clase específica que contiene el título del producto, que luego puedes utilizar en tu código.

    Además, es posible que desees agregar un manejo de errores en tu bucle, en caso de que no se pueda leer el HTML o no se pueda encontrar el título del producto. Esto se puede hacer utilizando un bloque tryCatch.

    library(readxl)
    URL_creator <- read_excel("URL creator.xlsx")
    
    library(rvest)
    content_list <- vector()
    for (i in 1:nrow(URL_creator)) {
      url <- URL_creator[i,]$DE
      tryCatch({
        html <- read_html(url)
        nodes <- html_nodes(html, "h1.productTitle") %>% # actualiza el selector en función de la inspección HTML
          html_text() %>%
          gsub("\n", "", .) %>%
          trimws()
        content_list[i] <- nodes[1]
      }, error = function(e) {
        content_list[i] <- NA # establecer como NA si ocurre un error
      })
    }
    
    content_list
    

    Este código utiliza un bloque tryCatch para capturar cualquier error que pueda ocurrir durante el bucle (como si no se puede acceder al sitio web o si no se puede encontrar el título del producto) y establece el elemento correspondiente en content_list como NA.

    Espero que esto ayude. Avísame si tienes alguna pregunta adicional.

Comments are closed.