Este post está enfocado a las personas (que como yo en su momento), no tienen conocimientos técnicos de HTML ni de lenguage de programación en general. Asumo que tienes algún cocimiento básico de R, aunque creo que con solo copiar y pegar lo puedes conseguir. También no explicaré más de lo necesario para lograr el resultado que queremos;esto porque ya existen inumerables post al respecto que hacen mejor trabajo que el que yo pudiera hacer.
Puedes instalar SelectorGadget. Luego de que instales SelectorGadget aparecerá el símbolo de una lupa al lado de la barra de direcciones (arriba a la derecha). Por el momento SelectorGadget sólo está disponible para Chrome.
Los selectores CSS son los que permiten localizar un elemento en el HTML. SelectorGadget es la única herramienta que conozco con la que puedes seleccionar CSS con el ratón directamente en la página web. Hay otras soluciones pero son más complicada por lo que escapan al proposito de este post.
En modo de ejemplo digamos que queremos sacar el título de una noticia en la siguiente página. Para esto tenemos que entrar a dicha página a través de Chrome y activar SelectorGadget. Luego de realizar esto notamos que al pasar el ratón por la página esta cambiará de colores en diferentes partes. Estos colores identifican las partes del HTML. Cuando le das click a alguna parte esta mantendrá un color verde.
En nuestro caso nos interesa el título de la página, por lo tanto con SelectorGadget activado le damos click al título. A continuación un pantallazo de lo descrito:
Arriba a la derecha vemos el ícono de SelectorGadget. En medio en verde vemos la selección del título de la notica y abajo a la derecha marcado en amarillo vemos el código CSS que corresponde a dicho título
El título está marcado en verde, indicando que este contenido ha sido seleccionado por SelectorGadget. Abajo a la derecha hay una barra que indica el código CSS que corresponde a la sección seleccionada. Este debe de ser guardado para poder extraerlo luego en el código en R.
Esta es la barra de SelectorGadget que muestra el código CSS para la parte seleccionada, en el caso del ejemplo el título de la notica
Como vemos en la foto arriba el código CSS que nos interesa es “.priority-content”.
Ahora que ya tenemos el código CSS, podemos pasar a R, para hacer un código que extraiga dicha parte del HTML.
library(xml2) #libreria para leer HTML
suppressWarnings(library(rvest)) #libreria para extaer partes de HTML
url <- "https://www.diariolibre.com/noticias/justicia/jurista-cae-mal-que-se-haga-enfasis-en-la-extorsion-en-el-asesinato-de-yuniol-ramirez-FK8396733" #la página de la cual queremos sacar información
html <- read_html(url) #leyendo HTML
titulo_bruto <- html_nodes(html,".priority-content") #extrayendo el HTML en bruto
titulo_bruto
## {xml_nodeset (1)}
## [1] <h1 class="art-title priority-content" mlnid="idcon=8971650;order=7. ...
Como vemos en la impresión arriba la variable titulo_bruto nos trae el titulo como lo tiene codificado la página, pero a nosotros solo nos interesa el texto, por lo que debemos de hacer algo adicional para extaerlo.
titulo <- html_text(titulo_bruto) #extraer texto sin codigos de html
titulo
## [1] "Jurista: <U+0093>Cae mal<U+0094> que se haga énfasis en la extorsión en el asesinato de Yuniol Ramírez"
como vemos con html_text() extraemos solo el texto.
A R le fue integrado una funcionalidad excelente que hace que el código sea mas natural de leer y muchas veces mas corto . Esta funcionalidad se llama operador “pipe” (tubería en ingles) que no es más que una expresion especial que permite enviar lo que está a la izquierda a la funcion la derecha. Hay muchos artículos muy buenos al respecto por lo que no perderé el tiempo en la explicación, no obstante creo que es tan simple que con solo leer el código lo entenderas. A continuación el código que hicimos arriba reestructurado con la expresión especial “pipe”
library(xml2) #libreria para leer HTML
suppressWarnings(library(rvest)) #libreria para extaer partes de HTML
url <- "https://www.diariolibre.com/noticias/justicia/jurista-cae-mal-que-se-haga-enfasis-en-la-extorsion-en-el-asesinato-de-yuniol-ramirez-FK8396733"
titulo <- read_html(url) %>% html_nodes(".priority-content") %>% html_text()
como vemos arriba, con el “pipe” podemos leer el html, sacar el objeto que deseamos y simplificarlo a simple texto, con sólo una línea de código.
El ejemplo anterior aplica para extraer sólo una información, no obstante regularmente nos interesa sacar varias informaciones de la misma página. En nuestro caso, quizas nos interese sacar la fecha o el primer párrafo de la notica. El procedimiento es el mismo pero mostraré el código como ejemplo, para evitar leer el html de nuevo. Es decir, ya cuando el html ha sido cargado a R, podemos extraer cualquier objeto del mismo, por lo que sólo debemos de buscar el CSS para el nuevo objeto. El siguiente código muestra como extraer la fecha y el primer párrafo de la misma noticia. Recuerda que debes de buscar los códigos CSS como lo hicimos en los pasos 4 y 5 de este mismo tutorial.
library(xml2) #libreria para leer HTML
suppressWarnings(library(rvest)) #libreria para extaer partes de HTML
url <- "https://www.diariolibre.com/noticias/justicia/jurista-cae-mal-que-se-haga-enfasis-en-la-extorsion-en-el-asesinato-de-yuniol-ramirez-FK8396733"
html <- read_html(url) #creamos un ojbeto para poder acceder al HTML para cada objeto
titulo <- html %>% html_nodes(".priority-content") %>% html_text()
parrafo <- html %>% html_nodes(".text p:nth-child(1)") %>% html_text()
fecha <- html %>% html_nodes(".art-date") %>% html_text()
titulo; parrafo; fecha
## [1] "Jurista: <U+0093>Cae mal<U+0094> que se haga énfasis en la extorsión en el asesinato de Yuniol Ramírez"
## [1] "SANTO DOMINGO. El jurista Félix Damián Olivares consideró hoy preocupante que las autoridades policiales y del Ministerio Público hayan hecho énfasis en el móvil del asesinato del abogado y profesor de la Universidad Autónoma de Santo Domingo (UASD), Yuniol Ramírez Ferreras, cuando la intención era silenciar a una persona que insistía en sus denuncias de los actos de corrupción."
## [1] " | \t \t \t\t\t\t \t\t\t\t \t\t\t\t \t\t \t\t\t \t\t\t\t17 OCT 2017, 10:01 AM\r\n \t\t\t \t\t\t \r\n \t\t\t\t \t\t\t\t \t\t\t\t \t\t\t\t\t "
Como vemos primero creamos un objeto de la lectura del HTML, esto sería como cargar un vector o matrix a R. Esto nos permite poder seleccionar lo que nos interese de este objeto (como si extrajeramos datos de una matrix).
Importante notar que la fecha vino como muchos otros caracteres que no nos interesan. Esto sucede mucho cuando sacamos información de páginas de internet. Por lo que siempre debemos de revisar lo que estamos sacado, para así limpiar cualquier cosa que no nos interese.