Web Scraping de datos COVID-19 usando BeautifulSoup en Python
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.
¿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
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:
- Extracción de datos de paginas web con Pandas - WebScraping con Python
- Web Scraping - Extrayendo Información de Paginas Webs
- Web Scraping con Python y BeautifulSoup
- Script en Python para rastrear los precios en Amazon
- Extraer correos electrónicos de páginas web con python
- Completar formularios con mechanize y BeautifulSoup
- Descarga videos de la web con Python de forma rapida y facil
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
Deja una respuesta
Sin duda una técnica de extracción de datos muy valiosa y Python nos lo pone muy fácil.
Gracias