Web Scraping de datos COVID-19 usando BeautifulSoup en Python

Índice

    Introducción

    El coronavirus (COVID-19), un tema que nos ha tocado a todos de alguna manera y que hoy es una de las mayores tendencias mundiales, ha despertado y generado cientos de páginas con estadísticas y datos de interes general. En este artículo, recopilaremos datos utilizando Web Scraping e imprimiremos estadísticas de Covid-19 en forma legible y nos puedan ser útiles para otras funcionalidades. Los datos se extraerán de este sitio web.

    Web Scraping de datos COVID-19 usando BeautifulSoup en Python

    ¿Qué es Web Scraping?

    Con varios intentos de frenar el efecto de COVID19 en el mundo, varios trabajos de investigación y medidas innovadoras dependen de los conocimientos adquiridos a partir de los datos correctos. Es posible que la mayoría de los datos necesarios para ayudar a las innovaciones no estén disponibles a través de la interfaz de programación de aplicaciones (API) o formatos de archivo como ".csv" esperando ser descargados, pero solo se puede acceder a ellos como parte de una página web.

    Para resolver este inconveniente, utilizamos Web scraping, un término que se utiliza para describir el uso de un programa o algoritmo para extraer y procesar grandes cantidades de datos de la web. Ya sea que sea un científico de datos, un ingeniero o cualquiera que analice grandes cantidades de conjuntos de datos, la capacidad de extraer datos de la web es una habilidad muy útil.

    Salida del Código

    Web Scraping, salida del código con Python 3

    Requisítos y Código

    Para realizar la extracción de los datos necesitaremos de las siguientes librerías:

    • pip install bs4
    • pip install requests
    • pip install texttable

    Dejaré todo el código en Python 3 y con los comentarios que se agregan en el código podrán tener la información suficiente para analizar el código. Si igualmente hay algún tipo de dudas no olvides dejarla en los comentarios.

    import requests
    from bs4 import BeautifulSoup
    import texttable as tt
    
    # URL para extraer datos
    url = 'https://www.worldometers.info/coronavirus/countries-where-coronavirus-has-spread/'
     
    # get URL html
    page = requests.get(url)
    soup = BeautifulSoup(page.text, 'html.parser')
     
    data = []
     
    # soup.find_all('td') raspará cada 
    # elemento en la tabla de la URL
    data_iterator = iter(soup.find_all('td')) 
     
    # data_iterator es el iterador de la tabla
    # Este ciclo seguirá repitiéndose hasta que haya
    # datos disponibles en el iterador
    while True:
        try:
            country = next(data_iterator).text
            confirmed = next(data_iterator).text
            deaths = next(data_iterator).text
            continent = next(data_iterator).text
     
            data.append((
                country,
                int(confirmed.replace(',', '')),
                int(deaths.replace(',', '')),
                continent
            ))
     
        # El error StopIteration se genera cuando
        # no quedan más elementos para
        # iterar
        except StopIteration:
            break
     
    # Ordenar los datos por el número de casos confirmados
    data.sort(key = lambda row: row[1], reverse = True)
    
    
    # crea texttable object
    table = tt.Texttable()
     
    # Agrega una fila vacía al principio para los encabezados
    table.add_rows([(None, None, None, None)] + data) 
     
    # 'l' denota izquierda, 'c' denota centro,
    # y 'r' denota derecha
    table.set_cols_align(('c', 'c', 'c', 'c'))  
    table.header((' Pais ', ' Numero de Casos ', ' Muertes ', ' Continente '))
     
    print(table.draw())
    

    Enlaces de Interes

    Quizá te intere algún otro artículo sobre Web Scraping, te los dejo en los siguientes links:

    Espero que toda esta información te sea de ayuda para seguir incursionando en el mundo del Scraping.

    Nuevamente motivarte a que nos dejes un comentario si el código te ha sido de ayuda.

    Saludos, Diego

    dcaraballo

    Creador de @PythonDiario, amante de la Tecnología y la Naturaleza. Programador Python, C# . NET

    1. Tomas dice:

      Sin duda una técnica de extracción de datos muy valiosa y Python nos lo pone muy fácil.
      Gracias

      1. dcaraballo dice:

        Muchas Gracias Tomas por tu respuesta, sin duda Python, como dices tú, no ayuda mucho a realizar este tipo de tareas. Saludos

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Subir

    Te has suscrito correctamente al boletín

    Se produjo un error al intentar enviar tu solicitud. Inténtalo de nuevo.

    Mi Diario Python will use the information you provide on this form to be in touch with you and to provide updates and marketing.