Google+ Seguidores

sábado, 7 de julio de 2018

Extracción de datos de paginas web con Pandas - WebScraping con Python

Introducción:

Hola amigos de Internet. Bienvenidos a Mi Diario Python, el mejor blog para Aprender Python.

En este corto articulo, les mostrare la funcionalidad de la librería Pandas para leer datos de paginas web.  Esto nos permitirá extraer información de tablas de cuerpos HTML.

Imagen relacionada

La función read_html

La función read_html  es un método disponible en la librería Pandas utilizada para el análisis de datos. Ya hemos visto como funciona Pandas, almacena los datos en tablas, y nos permite escribir archivos csv. La función read_html  nos permite extraer datos directamente de paginas web. 

La función es muy fácil de utilizar, con solo pasarle la URL de la pagina web con la que queremos trabajar como argumento, extraerá los datos en tablas.

Veamos un pequeño ejemplo:

import pandas as pd
#Se lee los datos de wikipedia de los países
paises=pd.read_html('https://es.wikipedia.org/wiki/Anexo:Pa%C3%ADses')
print(paises)

[                                            0  \
 0                       Estado(forma oficial)   
 1            República Islámica de Afganistán   
 2                        República de Albania   
 3               República Federal de Alemania   
 4                       Principado de Andorra   
 5                         República de Angola   
 6                           Antigua y Barbuda   
 7                     Reino de Arabia Saudita   
 8    República Argelina Democrática y Popular   
 9                         República Argentina   
 10                       República de Armenia   
 11                  Mancomunidad de Australia   
 12                       República de Austria   
 13                    República de Azerbaiyán   
 14                Mancomunidad de las Bahamas   
 15             República Popular de Bangladés   
 16                                   Barbados   
 17                            Reino de Baréin   
 18                           Reino de Bélgica   
 19                                     Belice   
 20                       República de Belarús   
 21                         República de Benín   
 22       República de la Unión de Myanmar[4]​   
 23            Estado Plurinacional de Bolivia   
 24                       Bosnia y Herzegovina   
 25                      República de Botsuana   
 26             República Federativa de Brasil   
 27                Estado de Brunéi Darussalam   
 28                      República de Bulgaria   
 29                               Burkina Faso   
 ..                                        ...   
 166                         Reino de eSwatini   

En el ejemplo estoy utilizando una pagina de Wikipedia la cual contiene una lista de los países del mundo con sus respectivas características. El resultado es una lista de los nombres de los pises y sus respectivas características. Cada tabla, tiene su espacio, veremos como extraer lo que necesitemos.

paises[0]

012345678
0Estado(forma oficial)Nombre comúnForma de gobiernoCapital(es)ContinenteEstatus ONUSoberaníaNotasUbicación
1República Islámica de AfganistánAfganistánRepública islámica presidencialistaKabulAsiaMiembro (1946)ReconocidaNaNNaN
2República de AlbaniaAlbaniaRepública parlamentariaTiranaEuropaMiembro (1955)ReconocidaNaNNaN
3República Federal de AlemaniaAlemaniaRepública parlamentariaBerlínEuropaMiembro (1973)[1]​ReconocidaEstado miembro de la Unión Europea. Alemania e...NaN
4Principado de AndorraAndorraMonarquía constitucionalAndorra la ViejaEuropaMiembro (1993)ReconocidaCoprincipado con dos jefes de Estado, el presi...NaN

Si mostramos el indice 0 de "paises", veremos una tabla extremadamente grande, solo les estoy mostrando 4 columnas de las 195 que me muestra la pagina.

Muy bien, si sabes utilizar Pandas, sabe lo que viene ahora. Vemos mucha información, es momento de extraer lo que más nos interese. En este caso yo quiero el nombre de los países, su capital y su continente.

for x in range(1, 195):
    nombre = paises[0][1][x] # Nombre de los paises. Por ello utilizamos el indice 1
    capital = paises[0][3][x] # Nombre d elas capitales. Indice 3
    continente = paises[0][4][x] # Nombre de los continentes. Indice 4
    print("%s es la capital de %s (%s)" % (capital, nombre, continente))

Kabul es la capital de Afganistán (Asia)
Tirana es la capital de Albania (Europa)
Berlín es la capital de Alemania (Europa)
Andorra la Vieja es la capital de Andorra (Europa)
Luanda es la capital de Angola (África)
Saint John es la capital de Antigua y Barbuda (América)
Riad es la capital de Arabia Saudí / Arabia Saudita (Asia)
Argel es la capital de Argelia (África)
Buenos Aires es la capital de Argentina (América)
Ereván es la capital de Armenia (Asia-Europa)
...

Y el resultado debería ser una lista de 195 lineas.
Este proceso realizado con Pandas, nos abre las puertas a crear archivos csv o excel con 
todos los datos que tu extraigas.

¿Que te pareció? No dudo en que te servirá de mucho.

¿Alguna duda? No dudes en dejar tu comentario.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.

4 comentarios :
Write comentarios
  1. Gracias muy bien presentado el tema pero quizas sea valioso usar jupyter para mostrar los datos creo que es un poco mas tangible y facil de comprender.

    Nuevamente excelente tutorial, este tema es complicado y me ha costado mucho tiempo dominarlo. Felicidades

    ResponderEliminar
    Respuestas
    1. Hola Enrique, gracias por visitar nuestro blog. De hecho todo esto lo he hecho en Jupyter. Si quiere que le facilite el archivo "ipynb" solo digamelo.

      Eliminar
  2. Respuestas
    1. Gracias por visitar el blog. Puede conocer más sobre Pandas indagando en nuestros artículos :D.

      Eliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Powered by Blogger .