Tutorial de web scraping

Como en cualquier aventura de R, lo primero que hay que hacer para adentrarnos al mundo del web scraping es cargar la librería {rvest} que nos ayuda a extraer datos de sitios web.

library(rvest)
library(tidyverse)

Después copiamos la url de la página de la cual queremos extraer nuestros datos y la guardamos en un objeto que se llame url. Después usamos la función read_html() de la librería {rvest} para descargar el código html de la página que vamos a usar y por último lo guardamos en un objeto que se llame code.

url <- "https://en.wikipedia.org/wiki/Legality_of_cannabis"
code <- read_html(url)
code
## {html_document}
## <html class="client-nojs" lang="en" dir="ltr">
## [1] <head>\n<meta http-equiv="Content-Type" content="text/html; charset= ...
## [2] <body class="mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-sub ...

cannabis

De la página de cannabis de wikipedia utilizamos la herramienta inspect para ver la aqruitectura de la página web. De ese código seleccionamos las ramas o nodos que estemos interesados en descargar, es decir los enlaces del artículo del estatus legal del cannabis para cada país en particular. Copiamos la ruta de cada nodo y la pegamos en R.

url <- "https://en.wikipedia.org/wiki/Legality_of_cannabis"

# Nodos de interés... (enlaces al articulo de cada pais en particular)
#mw-content-text > div.mw-parser-output > table > tbody > tr:nth-child(1) > td:nth-child(4) > div > a
#mw-content-text > div.mw-parser-output > table > tbody > tr:nth-child(2) > td:nth-child(4) > div > a
#mw-content-text > div.mw-parser-output > table > tbody > tr:nth-child(3) > td:nth-child(4) > div > a
#mw-content-text > div.mw-parser-output > table > tbody > tr:nth-child(4) > td:nth-child(4) > div > a
# ... 
#mw-content-text > div.mw-parser-output > table > tbody > tr:nth-child(206) > td:nth-child(4) > div > a

Guardamos la dirección del nodo número dos en un objeto que se llame node. Esta sintaxis nos sirve para comparar la ruta del nodo con las demás rutas que tenemos arriba para observar lo que varía en cada una y poder generar un loop más adelante.

node <- "#mw-content-text > div.mw-parser-output > table > tbody > tr:nth-child(2) > td:nth-child(4) > div > a"

Después usamos la función html_table() para obtener el nodo de las tablas enteras. Dentro de la función metemos el objeto code que creamos antes y que contiene la url de la página completa, del árbol.

tablas <- html_table(code, fill = TRUE)

Convertimos el objeto tablas en un tibble para poder manipularlo más fácilmente.

tabla_con_todo <- tablas[[1]] %>% as_tibble()

Después usamos la función html_node() para extraer la información del nodo de la página web que guardamos en el objeto code. La información de html_node() se encuentra en lenguaje de programación, entonces no podemos entenderlo como datos crudos y debemos traducirlo. Usamos la función html_text() ara extraer el contenido de los nodos.

En la siguiente línea de código utilizamos html_node() para bajar la información de la página y usamos html_attr() para extraer los atributos de la rama cuyos atributos nos interesan. En este caso el atributo que nos interesa es “href”.

html_node(code, node) %>% html_text()
## [1] "Cannabis in Afghanistan"
html_node(code, node) %>% html_attr("href")
## [1] "/wiki/Cannabis_in_Afghanistan"

Creamos un dataframe vacío que va a almacenar los resultados del loop que vamos a construir. Guardamos este dataframe en un objeto que se llame articulos_x_pais.

articulos_x_pais <- data.frame()

Abrimos un loop en el que nuestro contador será i y nuestra secuencia irá de 2 a 206, que es el número de artículos de wikipedia de países y el estatus legal del cannabis. En conjunto esta línea de código representa nuestra condición lógica.

La primera acción que va a ejecutar nuestro loop es construir la liga de la cual va a bajar información, es decir, vamos a cambiar las partes variables de la url de wikipedia y las vamos a sustituir por el contador i. Usamos paste0 para construirla.

Después vamos a repetir la extracción de nodos y su contenido con las funciones hmtl_node y html_text y lo guardamos en un objeto que se llame texto. Después extraemos la rama con atributos usando html_attr() y lo guardamos en un objeto que se llame enlace.

Construimos la dirección url que nos lleve directamente a la rama o nodo que nos interesa. En este caso esa es la parte variable que le pegamos a la url general con paste0.

ramas

Después creamos un tibble utilizando la información que guardamos en el objeto texto (contiene los datos de nuestra rama sin atributos) y la información que guardamos en el objeto enlace (que es la rama con atributos). Usando la función rbind.data.frame() combinamos la información de los nodos y las metemos en el objeto articulos_x_pais que era un data frame vacío.

Lo último es que R imprima el la frase “Dato extraído no.” el contador entre 2 y 206 y la cadena de texto “/206”. Esto se va a desplegar cada vez que R termine del ciclo del loop y nos permite obtener de manera organizada los datos que nos interesa recolectar.

for (i in 2:206){
  node <- paste0("#mw-content-text > div.mw-parser-output > table > tbody > tr:nth-child(", i, ") > td:nth-child(4) > div > a")
  texto <- html_node(code, node) %>% html_text()
  enlace <- html_node(code, node) %>% html_attr("href")
  enlace <- paste0("https://en.wikipedia.org/", enlace)
  articulos_x_pais <- rbind.data.frame(articulos_x_pais, 
                                       tibble(texto = texto,
                                              enlace = enlace))
  print(paste0("Dato extraído no. ", i, "/206"))
}
## [1] "Dato extraído no. 2/206"
## [1] "Dato extraído no. 3/206"
## [1] "Dato extraído no. 4/206"
## [1] "Dato extraído no. 5/206"
## [1] "Dato extraído no. 6/206"
## [1] "Dato extraído no. 7/206"
## [1] "Dato extraído no. 8/206"
## [1] "Dato extraído no. 9/206"
## [1] "Dato extraído no. 10/206"
## [1] "Dato extraído no. 11/206"
## [1] "Dato extraído no. 12/206"
## [1] "Dato extraído no. 13/206"
## [1] "Dato extraído no. 14/206"
## [1] "Dato extraído no. 15/206"
## [1] "Dato extraído no. 16/206"
## [1] "Dato extraído no. 17/206"
## [1] "Dato extraído no. 18/206"
## [1] "Dato extraído no. 19/206"
## [1] "Dato extraído no. 20/206"
## [1] "Dato extraído no. 21/206"
## [1] "Dato extraído no. 22/206"
## [1] "Dato extraído no. 23/206"
## [1] "Dato extraído no. 24/206"
## [1] "Dato extraído no. 25/206"
## [1] "Dato extraído no. 26/206"
## [1] "Dato extraído no. 27/206"
## [1] "Dato extraído no. 28/206"
## [1] "Dato extraído no. 29/206"
## [1] "Dato extraído no. 30/206"
## [1] "Dato extraído no. 31/206"
## [1] "Dato extraído no. 32/206"
## [1] "Dato extraído no. 33/206"
## [1] "Dato extraído no. 34/206"
## [1] "Dato extraído no. 35/206"
## [1] "Dato extraído no. 36/206"
## [1] "Dato extraído no. 37/206"
## [1] "Dato extraído no. 38/206"
## [1] "Dato extraído no. 39/206"
## [1] "Dato extraído no. 40/206"
## [1] "Dato extraído no. 41/206"
## [1] "Dato extraído no. 42/206"
## [1] "Dato extraído no. 43/206"
## [1] "Dato extraído no. 44/206"
## [1] "Dato extraído no. 45/206"
## [1] "Dato extraído no. 46/206"
## [1] "Dato extraído no. 47/206"
## [1] "Dato extraído no. 48/206"
## [1] "Dato extraído no. 49/206"
## [1] "Dato extraído no. 50/206"
## [1] "Dato extraído no. 51/206"
## [1] "Dato extraído no. 52/206"
## [1] "Dato extraído no. 53/206"
## [1] "Dato extraído no. 54/206"
## [1] "Dato extraído no. 55/206"
## [1] "Dato extraído no. 56/206"
## [1] "Dato extraído no. 57/206"
## [1] "Dato extraído no. 58/206"
## [1] "Dato extraído no. 59/206"
## [1] "Dato extraído no. 60/206"
## [1] "Dato extraído no. 61/206"
## [1] "Dato extraído no. 62/206"
## [1] "Dato extraído no. 63/206"
## [1] "Dato extraído no. 64/206"
## [1] "Dato extraído no. 65/206"
## [1] "Dato extraído no. 66/206"
## [1] "Dato extraído no. 67/206"
## [1] "Dato extraído no. 68/206"
## [1] "Dato extraído no. 69/206"
## [1] "Dato extraído no. 70/206"
## [1] "Dato extraído no. 71/206"
## [1] "Dato extraído no. 72/206"
## [1] "Dato extraído no. 73/206"
## [1] "Dato extraído no. 74/206"
## [1] "Dato extraído no. 75/206"
## [1] "Dato extraído no. 76/206"
## [1] "Dato extraído no. 77/206"
## [1] "Dato extraído no. 78/206"
## [1] "Dato extraído no. 79/206"
## [1] "Dato extraído no. 80/206"
## [1] "Dato extraído no. 81/206"
## [1] "Dato extraído no. 82/206"
## [1] "Dato extraído no. 83/206"
## [1] "Dato extraído no. 84/206"
## [1] "Dato extraído no. 85/206"
## [1] "Dato extraído no. 86/206"
## [1] "Dato extraído no. 87/206"
## [1] "Dato extraído no. 88/206"
## [1] "Dato extraído no. 89/206"
## [1] "Dato extraído no. 90/206"
## [1] "Dato extraído no. 91/206"
## [1] "Dato extraído no. 92/206"
## [1] "Dato extraído no. 93/206"
## [1] "Dato extraído no. 94/206"
## [1] "Dato extraído no. 95/206"
## [1] "Dato extraído no. 96/206"
## [1] "Dato extraído no. 97/206"
## [1] "Dato extraído no. 98/206"
## [1] "Dato extraído no. 99/206"
## [1] "Dato extraído no. 100/206"
## [1] "Dato extraído no. 101/206"
## [1] "Dato extraído no. 102/206"
## [1] "Dato extraído no. 103/206"
## [1] "Dato extraído no. 104/206"
## [1] "Dato extraído no. 105/206"
## [1] "Dato extraído no. 106/206"
## [1] "Dato extraído no. 107/206"
## [1] "Dato extraído no. 108/206"
## [1] "Dato extraído no. 109/206"
## [1] "Dato extraído no. 110/206"
## [1] "Dato extraído no. 111/206"
## [1] "Dato extraído no. 112/206"
## [1] "Dato extraído no. 113/206"
## [1] "Dato extraído no. 114/206"
## [1] "Dato extraído no. 115/206"
## [1] "Dato extraído no. 116/206"
## [1] "Dato extraído no. 117/206"
## [1] "Dato extraído no. 118/206"
## [1] "Dato extraído no. 119/206"
## [1] "Dato extraído no. 120/206"
## [1] "Dato extraído no. 121/206"
## [1] "Dato extraído no. 122/206"
## [1] "Dato extraído no. 123/206"
## [1] "Dato extraído no. 124/206"
## [1] "Dato extraído no. 125/206"
## [1] "Dato extraído no. 126/206"
## [1] "Dato extraído no. 127/206"
## [1] "Dato extraído no. 128/206"
## [1] "Dato extraído no. 129/206"
## [1] "Dato extraído no. 130/206"
## [1] "Dato extraído no. 131/206"
## [1] "Dato extraído no. 132/206"
## [1] "Dato extraído no. 133/206"
## [1] "Dato extraído no. 134/206"
## [1] "Dato extraído no. 135/206"
## [1] "Dato extraído no. 136/206"
## [1] "Dato extraído no. 137/206"
## [1] "Dato extraído no. 138/206"
## [1] "Dato extraído no. 139/206"
## [1] "Dato extraído no. 140/206"
## [1] "Dato extraído no. 141/206"
## [1] "Dato extraído no. 142/206"
## [1] "Dato extraído no. 143/206"
## [1] "Dato extraído no. 144/206"
## [1] "Dato extraído no. 145/206"
## [1] "Dato extraído no. 146/206"
## [1] "Dato extraído no. 147/206"
## [1] "Dato extraído no. 148/206"
## [1] "Dato extraído no. 149/206"
## [1] "Dato extraído no. 150/206"
## [1] "Dato extraído no. 151/206"
## [1] "Dato extraído no. 152/206"
## [1] "Dato extraído no. 153/206"
## [1] "Dato extraído no. 154/206"
## [1] "Dato extraído no. 155/206"
## [1] "Dato extraído no. 156/206"
## [1] "Dato extraído no. 157/206"
## [1] "Dato extraído no. 158/206"
## [1] "Dato extraído no. 159/206"
## [1] "Dato extraído no. 160/206"
## [1] "Dato extraído no. 161/206"
## [1] "Dato extraído no. 162/206"
## [1] "Dato extraído no. 163/206"
## [1] "Dato extraído no. 164/206"
## [1] "Dato extraído no. 165/206"
## [1] "Dato extraído no. 166/206"
## [1] "Dato extraído no. 167/206"
## [1] "Dato extraído no. 168/206"
## [1] "Dato extraído no. 169/206"
## [1] "Dato extraído no. 170/206"
## [1] "Dato extraído no. 171/206"
## [1] "Dato extraído no. 172/206"
## [1] "Dato extraído no. 173/206"
## [1] "Dato extraído no. 174/206"
## [1] "Dato extraído no. 175/206"
## [1] "Dato extraído no. 176/206"
## [1] "Dato extraído no. 177/206"
## [1] "Dato extraído no. 178/206"
## [1] "Dato extraído no. 179/206"
## [1] "Dato extraído no. 180/206"
## [1] "Dato extraído no. 181/206"
## [1] "Dato extraído no. 182/206"
## [1] "Dato extraído no. 183/206"
## [1] "Dato extraído no. 184/206"
## [1] "Dato extraído no. 185/206"
## [1] "Dato extraído no. 186/206"
## [1] "Dato extraído no. 187/206"
## [1] "Dato extraído no. 188/206"
## [1] "Dato extraído no. 189/206"
## [1] "Dato extraído no. 190/206"
## [1] "Dato extraído no. 191/206"
## [1] "Dato extraído no. 192/206"
## [1] "Dato extraído no. 193/206"
## [1] "Dato extraído no. 194/206"
## [1] "Dato extraído no. 195/206"
## [1] "Dato extraído no. 196/206"
## [1] "Dato extraído no. 197/206"
## [1] "Dato extraído no. 198/206"
## [1] "Dato extraído no. 199/206"
## [1] "Dato extraído no. 200/206"
## [1] "Dato extraído no. 201/206"
## [1] "Dato extraído no. 202/206"
## [1] "Dato extraído no. 203/206"
## [1] "Dato extraído no. 204/206"
## [1] "Dato extraído no. 205/206"
## [1] "Dato extraído no. 206/206"

Termina nuestro primer loop despues de correr 206 veces e imprimimos la base de datos articulos_x_pais para ver el contenido.

Filtramos las observaciones para reducir el tamaño de la base de datos. Después creamos una nueva columna que se llame contenido_paginas y llenamos la columna de “paja” que vamos a sustituir en un segundo loop más adelante. Por ahora, cada fila es igual a un NA. Reescribimos la base al volverla a guardar en el objeto articulos_x_pais.

articulos_x_pais
## # A tibble: 205 x 2
##    texto                     enlace                                        
##    <chr>                     <chr>                                         
##  1 Cannabis in Afghanistan   https://en.wikipedia.org//wiki/Cannabis_in_Af…
##  2 Cannabis in Albania       https://en.wikipedia.org//wiki/Cannabis_in_Al…
##  3 Cannabis in Algeria       https://en.wikipedia.org//wiki/Cannabis_in_Al…
##  4 Cannabis in Andorra       https://en.wikipedia.org//wiki/Cannabis_in_An…
##  5 Cannabis in Angola        https://en.wikipedia.org//wiki/Cannabis_in_An…
##  6 Cannabis in Antigua and … https://en.wikipedia.org//wiki/Cannabis_in_An…
##  7 Cannabis in Argentina     https://en.wikipedia.org//wiki/Cannabis_in_Ar…
##  8 Cannabis in Armenia       https://en.wikipedia.org//wiki/Cannabis_in_Ar…
##  9 Cannabis in Australia     https://en.wikipedia.org//wiki/Cannabis_in_Au…
## 10 Cannabis in Austria       https://en.wikipedia.org//wiki/Cannabis_in_Au…
## # … with 195 more rows
articulos_x_pais <- articulos_x_pais %>%
  filter(!is.na(texto)) %>% 
  mutate(contenido_paginas = NA)

Abrimos un nuevo loop en el que el contador es i y la secuencia va de 1 al número de filas que tenga la base de datos articulos_x_pais.

Extraemos la fila del contador i de la variable enlace de la base de datos articulos_x_pais y lo guardamos en un objeto que se llame url2. Usando la función read_html() extraemos el código html del objeto url2 Extraemos la información del nodo que estaba en el objeto code2 y obtenemos el contenido con la función html_text(), después le indicamos que inserte un espacio entre observaciones.

Metemos el objeto parrafos_de_cada_articulo en la fila que corresponda al contador i de la variable contenido_paginas de la base de datos articulos_x_pais. Es decir, sacamos la “paja” de NAs que habíamos metido y la sustituimos con los párrafos de los artículos quel objeto parrafos_de_cada_articulo.

Por último imprimimos la frase “Descargados párrafos del articulo de:”, usando el objeto articulos_x_pais$texto[i] que va variando por descarga para monitorear el proceso de descarga.

Para cada error que encuentre nuestro loop la función tryCatch() nos va a desplegar un mensaje que diga “Error!, no hay datos en esta pagina:” y nos indique de qué página esta hablando. Asimismo, esta función hace que el código siga corriendo a pesar de tener errores. Para el contenido de la variable contenido_paginas, pR despliega la cadena de texto “No hay artículo” para cada renglón que no tenga información disponible.

for(i in 1:nrow(articulos_x_pais)){
  tryCatch({
    url2 <- articulos_x_pais$enlace[i]
    code2 <- read_html(url2)
    parrafos_de_cada_articulo <- html_nodes(code2, "p") %>% 
      html_text() %>% 
      paste0(collapse = "<br>")
    articulos_x_pais$contenido_paginas[i] <- parrafos_de_cada_articulo
    print(paste0("Descargados párrafos del articulo de: ", articulos_x_pais$texto[i]))
  }, 
  error = function(e){
    print(paste0("Error!, no hay datos en esta pagina: ", articulos_x_pais$texto[i]))
    articulos_x_pais$contenido_paginas[i] <- "No hay artículo"
  })
}
## [1] "Descargados párrafos del articulo de: Cannabis in Afghanistan"
## [1] "Descargados párrafos del articulo de: Cannabis in Albania"
## [1] "Descargados párrafos del articulo de: Cannabis in Algeria"
## [1] "Descargados párrafos del articulo de: Cannabis in Andorra"
## [1] "Descargados párrafos del articulo de: Cannabis in Angola"
## [1] "Descargados párrafos del articulo de: Cannabis in Antigua and Barbuda"
## [1] "Descargados párrafos del articulo de: Cannabis in Argentina"
## [1] "Descargados párrafos del articulo de: Cannabis in Armenia"
## [1] "Descargados párrafos del articulo de: Cannabis in Australia"
## [1] "Descargados párrafos del articulo de: Cannabis in Austria"
## [1] "Descargados párrafos del articulo de: Cannabis in Azerbaijan"
## [1] "Descargados párrafos del articulo de: Cannabis in the Bahamas"
## [1] "Descargados párrafos del articulo de: Cannabis in Bahrain"
## [1] "Descargados párrafos del articulo de: Cannabis in Bangladesh"
## [1] "Descargados párrafos del articulo de: Cannabis in Barbados"
## [1] "Descargados párrafos del articulo de: Cannabis in Belarus"
## [1] "Descargados párrafos del articulo de: Cannabis in Belgium"
## [1] "Descargados párrafos del articulo de: Cannabis in Belize"
## [1] "Descargados párrafos del articulo de: Cannabis in Benin"
## [1] "Descargados párrafos del articulo de: Cannabis in Bermuda"
## [1] "Descargados párrafos del articulo de: Cannabis in Bhutan"
## [1] "Descargados párrafos del articulo de: Cannabis in Bolivia"
## [1] "Descargados párrafos del articulo de: Cannabis in Bosnia and Herzegovina"
## [1] "Descargados párrafos del articulo de: Cannabis in Botswana"
## [1] "Descargados párrafos del articulo de: Cannabis in Brazil"
## [1] "Descargados párrafos del articulo de: Cannabis in Brunei"
## [1] "Descargados párrafos del articulo de: Cannabis in Bulgaria"
## [1] "Descargados párrafos del articulo de: Cannabis in Burkina Faso"
## [1] "Descargados párrafos del articulo de: Cannabis in Burundi"
## [1] "Descargados párrafos del articulo de: Cannabis in Cambodia"
## [1] "Descargados párrafos del articulo de: Cannabis in Cameroon"
## [1] "Descargados párrafos del articulo de: Cannabis in Canada"
## [1] "Descargados párrafos del articulo de: Cannabis in Cape Verde"
## [1] "Descargados párrafos del articulo de: Cannabis in the Central African Republic"
## [1] "Descargados párrafos del articulo de: Cannabis in Chad"
## [1] "Descargados párrafos del articulo de: Cannabis in Chile"
## [1] "Descargados párrafos del articulo de: Cannabis in China"
## [1] "Descargados párrafos del articulo de: Cannabis in Colombia"
## [1] "Descargados párrafos del articulo de: Cannabis in Comoros"
## [1] "Descargados párrafos del articulo de: Cannabis in the Democratic Republic of the Congo"
## [1] "Descargados párrafos del articulo de: Cannabis in the Republic of the Congo"
## [1] "Descargados párrafos del articulo de: Cannabis in Costa Rica"
## [1] "Descargados párrafos del articulo de: Cannabis in Croatia"
## [1] "Descargados párrafos del articulo de: Cannabis in Cuba"
## [1] "Descargados párrafos del articulo de: Cannabis in Cyprus"
## [1] "Descargados párrafos del articulo de: Cannabis in the Czech Republic"
## [1] "Descargados párrafos del articulo de: Cannabis in Denmark"
## [1] "Descargados párrafos del articulo de: Cannabis in Djibouti"
## [1] "Descargados párrafos del articulo de: Cannabis in Dominica"
## [1] "Descargados párrafos del articulo de: Cannabis in the Dominican Republic"
## [1] "Descargados párrafos del articulo de: Cannabis in East Timor"
## [1] "Descargados párrafos del articulo de: Cannabis in Ecuador"
## [1] "Descargados párrafos del articulo de: Cannabis in Egypt"
## [1] "Descargados párrafos del articulo de: Cannabis in El Salvador"
## [1] "Descargados párrafos del articulo de: Cannabis in Equatorial Guinea"
## [1] "Descargados párrafos del articulo de: Cannabis in Eritrea"
## [1] "Descargados párrafos del articulo de: Cannabis in Estonia"
## [1] "Descargados párrafos del articulo de: Cannabis in Eswatini"
## [1] "Descargados párrafos del articulo de: Cannabis in Ethiopia"
## [1] "Descargados párrafos del articulo de: Cannabis in Fiji"
## [1] "Descargados párrafos del articulo de: Cannabis in Finland"
## [1] "Descargados párrafos del articulo de: Cannabis in France"
## [1] "Descargados párrafos del articulo de: Cannabis in Gabon"
## [1] "Descargados párrafos del articulo de: Cannabis in the Gambia"
## [1] "Descargados párrafos del articulo de: Cannabis in Georgia (country)"
## [1] "Descargados párrafos del articulo de: Cannabis in Germany"
## [1] "Descargados párrafos del articulo de: Cannabis in Ghana"
## [1] "Descargados párrafos del articulo de: Cannabis in Greece"
## [1] "Descargados párrafos del articulo de: Cannabis in Greenland"
## [1] "Descargados párrafos del articulo de: Cannabis in Grenada"
## [1] "Descargados párrafos del articulo de: Cannabis in Guatemala"
## [1] "Error!, no hay datos en esta pagina: Cannabis in Guinea"
## [1] "Error!, no hay datos en esta pagina: Cannabis in Guinea-Bissau"
## [1] "Descargados párrafos del articulo de: Cannabis in Guyana"
## [1] "Descargados párrafos del articulo de: Cannabis in Haiti"
## [1] "Descargados párrafos del articulo de: Cannabis in Honduras"
## [1] "Descargados párrafos del articulo de: Cannabis in Hong Kong"
## [1] "Descargados párrafos del articulo de: Cannabis in Hungary"
## [1] "Descargados párrafos del articulo de: Cannabis in Iceland"
## [1] "Descargados párrafos del articulo de: Cannabis in India"
## [1] "Descargados párrafos del articulo de: Cannabis in Indonesia"
## [1] "Descargados párrafos del articulo de: Cannabis in Iran"
## [1] "Descargados párrafos del articulo de: Cannabis in Iraq"
## [1] "Descargados párrafos del articulo de: Cannabis in Ireland"
## [1] "Descargados párrafos del articulo de: Cannabis in Israel"
## [1] "Descargados párrafos del articulo de: Cannabis in Italy"
## [1] "Descargados párrafos del articulo de: Cannabis in Ivory Coast"
## [1] "Descargados párrafos del articulo de: Cannabis in Jamaica"
## [1] "Descargados párrafos del articulo de: Cannabis in Japan"
## [1] "Descargados párrafos del articulo de: Cannabis in Jordan"
## [1] "Descargados párrafos del articulo de: Cannabis in Kazakhstan"
## [1] "Descargados párrafos del articulo de: Cannabis in Kenya"
## [1] "Descargados párrafos del articulo de: Cannabis in Kiribati"
## [1] "Descargados párrafos del articulo de: Cannabis in North Korea"
## [1] "Descargados párrafos del articulo de: Cannabis in South Korea"
## [1] "Error!, no hay datos en esta pagina: Cannabis in Kosovo"
## [1] "Descargados párrafos del articulo de: Cannabis in Kuwait"
## [1] "Descargados párrafos del articulo de: Cannabis in Kyrgyzstan"
## [1] "Descargados párrafos del articulo de: Cannabis in Laos"
## [1] "Descargados párrafos del articulo de: Cannabis in Latvia"
## [1] "Descargados párrafos del articulo de: Cannabis in Lebanon"
## [1] "Descargados párrafos del articulo de: Cannabis in Lesotho"
## [1] "Descargados párrafos del articulo de: Cannabis in Liberia"
## [1] "Error!, no hay datos en esta pagina: Cannabis in Libya"
## [1] "Descargados párrafos del articulo de: Cannabis in Liechtenstein"
## [1] "Descargados párrafos del articulo de: Cannabis in Lithuania"
## [1] "Descargados párrafos del articulo de: Cannabis in Luxembourg"
## [1] "Descargados párrafos del articulo de: Cannabis in Macau"
## [1] "Descargados párrafos del articulo de: Cannabis in Madagascar"
## [1] "Descargados párrafos del articulo de: Cannabis in Malawi"
## [1] "Descargados párrafos del articulo de: Cannabis in Malaysia"
## [1] "Descargados párrafos del articulo de: Cannabis in the Maldives"
## [1] "Descargados párrafos del articulo de: Cannabis in Mali"
## [1] "Descargados párrafos del articulo de: Cannabis in Malta"
## [1] "Descargados párrafos del articulo de: Cannabis in the Marshall Islands"
## [1] "Descargados párrafos del articulo de: Cannabis in Mauritania"
## [1] "Descargados párrafos del articulo de: Cannabis in Mauritius"
## [1] "Descargados párrafos del articulo de: Cannabis in Mexico"
## [1] "Descargados párrafos del articulo de: Cannabis in Micronesia"
## [1] "Descargados párrafos del articulo de: Cannabis in Moldova"
## [1] "Descargados párrafos del articulo de: Cannabis in Monaco"
## [1] "Descargados párrafos del articulo de: Cannabis in Mongolia"
## [1] "Descargados párrafos del articulo de: Cannabis in Montenegro"
## [1] "Descargados párrafos del articulo de: Cannabis in Morocco"
## [1] "Descargados párrafos del articulo de: Cannabis in Mozambique"
## [1] "Descargados párrafos del articulo de: Cannabis in Myanmar"
## [1] "Descargados párrafos del articulo de: Cannabis in Namibia"
## [1] "Descargados párrafos del articulo de: Cannabis in Nepal"
## [1] "Descargados párrafos del articulo de: Cannabis in the Netherlands"
## [1] "Descargados párrafos del articulo de: Cannabis in New Zealand"
## [1] "Error!, no hay datos en esta pagina: Cannabis in Nicaragua"
## [1] "Error!, no hay datos en esta pagina: Cannabis in Niger"
## [1] "Descargados párrafos del articulo de: Cannabis in Nigeria"
## [1] "Descargados párrafos del articulo de: Cannabis in North Macedonia"
## [1] "Descargados párrafos del articulo de: Cannabis in Norway"
## [1] "Descargados párrafos del articulo de: Cannabis in Oman"
## [1] "Descargados párrafos del articulo de: Cannabis in Pakistan"
## [1] "Descargados párrafos del articulo de: Cannabis in Palau"
## [1] "Descargados párrafos del articulo de: Cannabis in Panama"
## [1] "Descargados párrafos del articulo de: Cannabis in Papua New Guinea"
## [1] "Descargados párrafos del articulo de: Cannabis in Paraguay"
## [1] "Descargados párrafos del articulo de: Cannabis in Peru"
## [1] "Descargados párrafos del articulo de: Cannabis in the Philippines"
## [1] "Descargados párrafos del articulo de: Cannabis in Poland"
## [1] "Descargados párrafos del articulo de: Cannabis in Portugal"
## [1] "Descargados párrafos del articulo de: Cannabis in Qatar"
## [1] "Descargados párrafos del articulo de: Cannabis in Romania"
## [1] "Descargados párrafos del articulo de: Cannabis in Russia"
## [1] "Descargados párrafos del articulo de: Cannabis in Rwanda"
## [1] "Descargados párrafos del articulo de: Cannabis in Saint Kitts and Nevis"
## [1] "Descargados párrafos del articulo de: Cannabis in Saint Lucia"
## [1] "Descargados párrafos del articulo de: Cannabis in Saint Vincent and the Grenadines"
## [1] "Descargados párrafos del articulo de: Cannabis in Samoa"
## [1] "Descargados párrafos del articulo de: Cannabis in San Marino"
## [1] "Descargados párrafos del articulo de: Cannabis in São Tomé and Principe"
## [1] "Descargados párrafos del articulo de: Cannabis in Saudi Arabia"
## [1] "Descargados párrafos del articulo de: Cannabis in Senegal"
## [1] "Descargados párrafos del articulo de: Cannabis in Serbia"
## [1] "Descargados párrafos del articulo de: Cannabis in Seychelles"
## [1] "Descargados párrafos del articulo de: Cannabis in Sierra Leone"
## [1] "Descargados párrafos del articulo de: Cannabis in Singapore"
## [1] "Descargados párrafos del articulo de: Cannabis in Slovakia"
## [1] "Descargados párrafos del articulo de: Cannabis in Slovenia"
## [1] "Descargados párrafos del articulo de: Cannabis in the Solomon Islands"
## [1] "Descargados párrafos del articulo de: Cannabis in Somalia"
## [1] "Descargados párrafos del articulo de: Cannabis in South Africa"
## [1] "Error!, no hay datos en esta pagina: Cannabis in South Sudan"
## [1] "Descargados párrafos del articulo de: Cannabis in Spain"
## [1] "Descargados párrafos del articulo de: Cannabis in Sri Lanka"
## [1] "Descargados párrafos del articulo de: Cannabis in Sudan"
## [1] "Descargados párrafos del articulo de: Cannabis in Suriname"
## [1] "Descargados párrafos del articulo de: Cannabis in Sweden"
## [1] "Descargados párrafos del articulo de: Cannabis in Switzerland"
## [1] "Descargados párrafos del articulo de: Cannabis in Syria"
## [1] "Descargados párrafos del articulo de: Cannabis in Taiwan"
## [1] "Descargados párrafos del articulo de: Cannabis in Tajikistan"
## [1] "Descargados párrafos del articulo de: Cannabis in Tanzania"
## [1] "Descargados párrafos del articulo de: Cannabis in Thailand"
## [1] "Descargados párrafos del articulo de: Cannabis in Togo"
## [1] "Descargados párrafos del articulo de: Cannabis in Tonga"
## [1] "Descargados párrafos del articulo de: Cannabis in Trinidad and Tobago"
## [1] "Descargados párrafos del articulo de: Cannabis in Tunisia"
## [1] "Descargados párrafos del articulo de: Cannabis in Turkey"
## [1] "Descargados párrafos del articulo de: Cannabis in Turkmenistan"
## [1] "Descargados párrafos del articulo de: Cannabis in Tuvalu"
## [1] "Descargados párrafos del articulo de: Cannabis in Uganda"
## [1] "Descargados párrafos del articulo de: Cannabis in Ukraine"
## [1] "Descargados párrafos del articulo de: Cannabis in the United Arab Emirates"
## [1] "Descargados párrafos del articulo de: Cannabis in the United Kingdom"
## [1] "Descargados párrafos del articulo de: Cannabis in the United States"
## [1] "Descargados párrafos del articulo de: Cannabis in Uruguay"
## [1] "Descargados párrafos del articulo de: Cannabis in Uzbekistan"
## [1] "Descargados párrafos del articulo de: Cannabis in Vanuatu"
## [1] "Descargados párrafos del articulo de: Cannabis in Venezuela"
## [1] "Descargados párrafos del articulo de: Cannabis in Vietnam"
## [1] "Descargados párrafos del articulo de: Cannabis in Yemen"
## [1] "Descargados párrafos del articulo de: Cannabis in Zambia"

Finalmente obtenemos las bases finales que son tabla_con_todo contiene el país del artículo, el estatus legal del cannabis, el estatus médico y notas. La base de datos de articulos_x_pais contiene el texto del artículo, el enlace y el contenido de la página.

# Bases finales
tabla_con_todo
## # A tibble: 207 x 4
##    `Country/Territo… Recreational          Medical           Notes         
##    <chr>             <chr>                 <chr>             <chr>         
##  1 Afghanistan       Illegal               Illegal           Main article:…
##  2 Albania           Illegal               Illegal           Main article:…
##  3 Algeria           Illegal               Illegal           Main article:…
##  4 Andorra           Illegal               Illegal           Main article:…
##  5 Angola            Illegal               Illegal           Main article:…
##  6 Antigua and Barb… Decriminalized        Illegal           Main article:…
##  7 Argentina         Decriminalized        Legal             Main article:…
##  8 Armenia           Illegal               Illegal           Main article:…
##  9 Australia         Decriminalized in No… Legal at federal… Main article:…
## 10 Austria           Possession for perso… Cannabis-derived… Main article:…
## # … with 197 more rows
articulos_x_pais
## # A tibble: 197 x 3
##    texto          enlace                  contenido_paginas                
##    <chr>          <chr>                   <chr>                            
##  1 Cannabis in A… https://en.wikipedia.o… "Cannabis in Afghanistan has bee…
##  2 Cannabis in A… https://en.wikipedia.o… "Cannabis in Albania is illegal,…
##  3 Cannabis in A… https://en.wikipedia.o… "Cannabis in Algeria is illegal.…
##  4 Cannabis in A… https://en.wikipedia.o… "The legality of cannabis in And…
##  5 Cannabis in A… https://en.wikipedia.o… Cannabis in Angola is illegal; t…
##  6 Cannabis in A… https://en.wikipedia.o… "Cannabis in Antigua and Barbuda…
##  7 Cannabis in A… https://en.wikipedia.o… Cannabis in Argentina is decrimi…
##  8 Cannabis in A… https://en.wikipedia.o… "Cannabis in Armenia is illegal …
##  9 Cannabis in A… https://en.wikipedia.o… "\n\n<br>Cannabis is a plant use…
## 10 Cannabis in A… https://en.wikipedia.o… Cannabis in Austria is legal for…
## # … with 187 more rows

Con estos datos obtenemos un panorama completo del estatus legal del cannabis en el mundo para ver si hay patrones regionales, internacionales o algo similar. Podemos hacer mapas con el status legal por país, un análisis de discurso de cada artículo para observar si hay diferencias entre lo que se escribe del cannabis por país y si depende del estatus legal o médico del cannabis.

También podemos comparar nuestra base de datos con otras variables como número de personas en prisiones por cargos de posesión de marihuana, el IDH, la tasa de homicidios, violencia o crímenes en países que tengan una postura anti-drogas, etc. Es una base muy interesante a la que se le puede sacar mucho jugo.

Y eso es un breve ejemplo de lo que es hacer web scraping, pero solo hemos raspado la punta del iceberg.