Join us at FabCon Atlanta from March 16 - 20, 2026, for the ultimate Fabric, Power BI, AI and SQL community-led event. Save $200 with code FABCOMM.
Register now!To celebrate FabCon Vienna, we are offering 50% off select exams. Ends October 3rd. Request your discount now.
He hecho un guión R para raspar un sitio web determinado. Funciona bien cuando lo ejecuto en Rstudio. Ahora quiero integrarlo en un escritorio Power Bi para que mis compañeros de trabajo puedan trabajar con él (sin tener que usar Rstudio). Sin embargo, sigo recibiendo un error, parece que la función read_html no funciona.
Mi guión original, que funciona en Rstudio. Utilizo un archivo .xlsx que contiene una lista de URLS (entrada.xlsx)
rm(list = ls())
library(rvest)
library(readxl)
library(xlsx)
library(rstudioapi)
# Set working directory and import URLs
setwd(dirname(getActiveDocumentContext()$path))
dfURL <- read_xlsx("Input.xlsx")
# Initiate dataframe
dfETA <- data.frame4, nrow = nrow(dfURL)))
colnames(dfETA) <- c("URL", "Vessel", "Destination", "ETA")
dfETA$URL <- dfURL$URL
1:nrow(dfURL)){
# Get URL & load webpage
url <- as.character(dfURL[i,])
page <- read_html(url)
# Extract CSS adresses
CSSextract1 <- html_nodes(page,'.n3ata')
CSSextract2 <- html_nodes(page,'.st')
# Convert to text
toText1 <- html_text(CSSextract1)
toText2 <- html_text(CSSextract2)
# Extract information from text
destination <- trimws(toText1[1])
ETA <- toText1[2]
# Fill df with information
dfETA$Vessel[i] <- toText2
dfETA$Destination[i] <- destination
dfETA$ETA[i] <- ETA
}
# Write to xlsx
write.xlsx(dfETA "Salida.xlsx", anexar = FALSE, row.names = FALSE)
Ya busqué mucho, una de las cosas que encontré es que debe señalar las ubicaciones de archivos y bibliotecas explícitamente. En power Bi, me aseguré de que las ubicaciones de la biblioteca son las mismas que las ubicaciones utilizadas por Rstudio (.libloc()) Además, antes de este error, Power Bi devolvió un error que no pudo encontrar el paquete xml2, lo instaló y cargué todo con los demás paquetes, el código resultante es donde estoy ahora y lo que produce el error. He tratado de hacer el código de tal manera, que quien esté dispuesto y capaz de ayudarme puede simplemente copiar y pegar el código, para que las ubicaciones de la biblioteca sean genéricas.
libloc_rvest <- find.package('rvest')
libloc_rvest <- substr(libloc_rvest, 1,nchar(libloc_rvest) - nchar("rvest"1)
libloc_readxl <- find.package("readxl")
libloc_readxl <- substr(libloc_readxl,1, nchar(libloc_readxl) - nchar("readxl"1)
libloc_rstudioapi <- find.package("rstudioapi")
libloc_rstudioapi <- substr(libloc_rstudioapi,1, nchar(libloc_rstudioapi) - nchar("rstudioapi"1)
libloc_xml2 <- find.package("xml2")
libloc_xml2 <- substr(libloc_xml2,1,nchar(libloc_xml2) - nchar("xml2"1)
biblioteca(rvest, biblioteca lib.loc=libloc_rvest)
(readxl, lib.loc=libloc_readxl)
biblioteca(rstudioapi, lib.loc=libloc_rstudioapi)
biblioteca(xml2, lib.loc=libloc_xml2) # Establecer directorio de trabajo e importar DIRECCIONES
URL
dfURL <- read_xlsx("N:/ETAscraper /ETAscraper/Input.xlsx") # Iniciar
dataframe
dfETAdata.frame(matrix(ncolnrownrow(dfURL)))
colnames(dfETA) <- c("URL""Vessel""Destination""ETA")
dfETA$URL <- dfURL$URL
paraen1 :nrow(dfURL)){
ObtenerURL & cargar página web
como.character(dfURL[i,])
página <- read_html(url)
Extraerdirecciones CSS
CSSextract1 <- html_nodes(página,'.n3ata')
CSSextract2 <- html_nodes(página,'.st')
Convertir en texto
aText1 <- html_text(CSSextract 1)
toText2 <- html_text(CSSextract2)
Extraer información del destino de texto
<- trimws(toText1[1])
ETA <- toText1[2]
Llenar df con información
DfETA$ Vessel[i] <- toText2
dfETA$Destination[i] <- destination
dfETA$ETA
} # Write to
xlsx#
write.xlsx(dfETA,"Output.xlsx", append = FALSE, row.names = FALSE)
Si alguien pudiera ayudarme, o señalarme en la dirección correcta, ¡eso sería muy apreciado!
No @BillyBouw,
Debe ser un error de Rvest, compruebe la referencia a continuación:
https://github.com/yusuzech/r-web-scraping-cheat-sheet/blob/master/README.md
Saludos
Kelly
¿Respondí a tu pregunta? ¡Marca mi puesto como solución!