Introducción al

Periodismo de datos

8 al 11 de mayo, 2017 

Olaya Argüeso @oargueso

Scraping con Xpath

=IMPORTXML

Fórmula de Google Spreadsheets (hojas de cálculo de Google) que nos permite extraer información de páginas web

Utiliza en lenguaje Xpath

Xpath recibe su nombre de la palabra "ruta" en inglés

C:\user\documentos\cv.doc

C:

user

documentos

cv.doc

Hyper Text Markup Language

<html>

       <title> Agencia EFE </title>

       <body>

                 <div>

                       <h3> Esto es un titular mediano </h3>

                        <p> Esto es un párrafo </p>

                        <p> Esto es otro párrafo </p>

                  </div>

       </body>

 

Imprescindible: conocer la estructura de la página web de la que queremos extraer información y localizar la información que nos interesa dentro de esta estructura

  1. Abrid Chrome
  2. Id a la página de la Agencia EFE
  3. Con el botón derecho del ratón, pinchad sobre la página

Ejemplos de etiquetas o "tags":

  • <div> señala un contenedor
  • <h1>, <h2>, <h3> ... son titulares (hasta <h6>). Cuanto menor es el número, más importante es el titular
  • <p> es un párrafo
  • <a> es un enlace
  • <ul> es una lista
  • <li> es un elemento de una lista

Xpath se basa en esas etiquetas  de HTML para localizar la información que nos interesa

¿Cómo funciona IMPORTXML?

=IMPORTXML("url";"path")

  1. Abrid Google Drive
  2. Cread una nueva hoja de cálculo
  3. Id a la página del registro de lobbies de la UE: http://ec.europa.eu/transparencyregister
  1. Buscad "España" en el registro
  2. Abrid el inspector de Google Chrome

La información que buscamos tiene la siguiente estructura:

li

h4

a

La información que buscamos tiene la siguiente estructura:

li

h4

a

hijo/child de "li"

hijo/child de "h4"

En lenguaje Xpath, esa estructura se traduce así:

 

li/h4/a

 

Es decir, / es el marcador para "hijo"

Vamos a ponerlo en práctica:

  1. Id a vuestra hoja de cálculo de Google
  2. IMPORTXML=("url registro lobbies";"li/h4/a")

¿Funciona?

"//" le indica a Xpath que busque ese elemento dentro de la página web, independientemente de dónde se encuentre

=IMPORTXML("url registro lobbies ue";"//a")

¿Funciona?

Si detallamos más la ruta, podemos ser más precisos en la extracción de información

li

h4

a

hijo/child de "li"

hijo/child de "h4"

=IMPORTXML("url registro lobbies ue";"//h4/a")

  1. Abrid la página de los premios Nobel: https://www.nobelprize.org
  2. Buscad el listado de los galardonados con el Nobel de Literatura
  3. ¿Cómo extraeríais los nombres de todos los premiados?

=IMPORTXML("url premios Nobel";"//h3/a")

  1. Abrid la página del Congreso de los Diputados

2. Abrid el inspector de Google Chrome

3. ¿Cómo extraeríais los nombres de las diputadas?

=IMPORTXML("url Congreso";"//li/a") extrae todos los enlaces que están incluidos en una lista

¿Podemos afinar la búsqueda?

"class" es un atributo

Los atributos se utilizan para identificar determinadas etiquetas y distinguirlas de otras iguales a ellas, puesto que el número de etiquetas es limitado y se repiten a lo largo de una página web

En Xpath, los atributos se identifican así:

[@class]

Para extraer los nombres de las diputadas:

=IMPORTXML("url Congreso";"//li/a[@class])"

¿Y para extraer el grupo parlamentario al que pertenecen?

=IMPORTXML("url Congreso";"//li/span[@class='dorado']")

Muy importante: las comillas del nombre que identifica al atributo son simples

¿Preguntas?

Introducción al periodismo de datos #10 - Scraping avanzado

By Olaya Argüeso Perez

Introducción al periodismo de datos #10 - Scraping avanzado

  • 143