iDEAL, la web para visualizar noticias del periódico IDEAL
Hace unos días, con una treintena de líneas de código,
conseguí leer noticias del periódico IDEAL sin salir de R, ese software libre de enfoque estadístico todoterreno.
Lo que hace unos días era un pequeño script en R ha madurado ahora en una web, más accesible y amigable:
http://bitly.com/iDEALgranada
El manual de empleo es simple: pegas la URL del artículo que quieres leer, y la noticia aparece a la derecha, con un diseño mejorable, pero que cumple.
Contra las barreras, código abierto.
Detrás de tanta letra, cómo no: Shiny. El código lo podéis encontrar en mi Github.
library(tidyverse)
library(xml2)
library(rvest)
library(shiny)
library(shinythemes)
ui <- fluidPage(theme = shinytheme("flatly"),
titlePanel(tags$h2(tags$b("iDEAL")), windowTitle = "iDEAL"),
tags$h4("Web de ", tags$a("Daniel Redondo.", href = "http://www.danielredondo.com"),
"Enlace corto a esta web:", tags$a("bitly.com/iDEALgranada", href = "http://bitly.com/iDEALgranada")),
sidebarLayout(
sidebarPanel(width = 4,
h3("Página web de la noticia:"),
textInput(inputId = "url",
label = NULL,
value = "https://www.ideal.es/culturas/informe-depende-nueva-20190118202616-nt.html"
)
),
mainPanel(uiOutput("noticia"))
)
)
server <- function(input, output) {
# Web scraping
titulo <- reactive(input$url %>% read_html() %>% html_nodes('h1') %>% html_text() %>% as.data.frame() %>% pull(1) %>% levels())
subtitulo_y_categoria <- reactive(input$url %>% read_html() %>% html_nodes('h2') %>% html_text())
subtitulo <- reactive(subtitulo_y_categoria()[2])
categoria <- reactive(subtitulo_y_categoria()[1])
cuerpo <- reactive({
cuerpo_original <- input$url %>% read_html() %>% html_nodes('p') %>% html_text()
# Ordenamos el cuerpo
cuerpo_recortado <- cuerpo_original[15:(length(cuerpo_original) - 1)]
body <- cuerpo_recortado[1]
for (i in 2:length(cuerpo_recortado)){
gsub(" ", "", cuerpo_recortado[i])
if(cuerpo_recortado[i]!="") body <- rbind(body, cuerpo_recortado[i])
}
return(body)
})
imprimir_noticia <- reactive({
req(input$url)
aux_t <- titulo() %>% tags$b() %>% tags$h3() %>% paste()
aux_s <- subtitulo() %>% tags$i() %>% tags$h4() %>% paste()
aux_c <- categoria() %>% tags$u() %>% tags$h4() %>% paste()
salida <- rbind(aux_t, aux_s, aux_c)
for (i in 1:length(cuerpo())) salida <- rbind(salida, paste(tags$p(cuerpo()[i], "\n \n")))
return(salida)
})
output$noticia <- renderUI(HTML(imprimir_noticia()))
}
shinyApp(ui = ui, server = server)
La web debería funcionar sin problema con todas las versiones del periódico Ideal (Granada, Almería y Jaén). Si encontráis algún problema, abre un issue en el repositorio de Github.
- Posted on:
- April 18, 2018
- Length:
- 2 minute read, 316 words
- Tags:
- web scraping
- See Also:
- Leyendo el periódico en R