BillyBouw
Hice un script R para raspar un determinado sitio web. 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 script original, que funciona en Rstudio. Utilizo un archivo .xlsx que contiene una lista de URL (input.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.frame(matrix(ncol = 4, nrow = nrow(dfURL)))
colnames(dfETA) <- c("URL", "Vessel", "Destination", "ETA")
dfETA$URL <- dfURL$URL
for (i in 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,"Output.xlsx", append = FALSE, row.names = FALSE)
Ya busqué allot, una de las cosas que encontré es que debes señalar las ubicaciones de archivos y bibliotecas explícitamente. En power Bi, me aseguré de que las ubicaciones de la biblioteca sean las mismas que las utilizadas por Rstudio (.libloc ()) Además, antes de este error, Power Bi devolvió un error de que no podía encontrar el paquete xml2, lo instalé y lo cargué junto con los otros paquetes, el código resultante es donde estoy ahora y lo que produce el error. Intenté hacer el código de tal manera que quien quiera y pueda ayudarme puede simplemente copiar y pegar el código, de modo 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)
library(rvest, lib.loc=libloc_rvest)
library(readxl, lib.loc=libloc_readxl)
library(rstudioapi, lib.loc=libloc_rstudioapi)
library(xml2, lib.loc=libloc_xml2)
# Set working directory and import URLs
dfURL <- read_xlsx("N:/ETAscraper/ETAscraper/Input.xlsx")
# Initiate dataframe
dfETA <- data.frame(matrix(ncol = 4, nrow = nrow(dfURL)))
colnames(dfETA) <- c("URL", "Vessel", "Destination", "ETA")
dfETA$URL <- dfURL$URL
for (i in 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,"Output.xlsx", append = FALSE, row.names = FALSE)
Si alguien pudiera ayudarme o señalarme en la dirección correcta, sería muy apreciado.
v-kelly-msft
Hola @BillyBouw,
Debería ser un error de Rvest, verifique la referencia a continuación:
https://github.com/yusuzech/r-web-scraping-cheat-sheet/blob/master/README.md
Atentamente,
Kelly
¿Respondí tu pregunta? ¡Marque mi publicación como una solución!