Scraping de estadísticas de Covid-19 usando BeautifulSoup

El coronavirus, una de las pandemias más grandes, ha puesto en peligro a todo el mundo. Junto a esto, es una de las Trending News que todo el mundo tiene este día. En este artículo, recopilaremos datos e imprimiremos estadísticas de Covid-19 en forma legible por humanos. Los datos se extraerán de este sitio web
Requisitos previos:
 

  • Las bibliotecas ‘requests’, ‘bs4’ y ‘texttable’ tienen que estar instaladas –
     
pip install bs4
pip install requests
pip install texttable

Proyecto: pasemos al código, cree un archivo llamado run.py. 

Python3

# importing modules
import requests
from bs4 import BeautifulSoup
 
# URL for scrapping data
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') will scrape every
# element in the url's table
data_iterator = iter(soup.find_all('td'))
 
# data_iterator is the iterator of the table
# This loop will keep repeating till there is
# data available in the iterator
while True:
    try:
        country = next(data_iterator).text
        confirmed = next(data_iterator).text
        deaths = next(data_iterator).text
        continent = next(data_iterator).text
 
        # For 'confirmed' and 'deaths',
        # make sure to remove the commas
        # and convert to int
        data.append((
            country,
            int(confirmed.replace(', ', '')),
            int(deaths.replace(', ', '')),
            continent
        ))
 
    # StopIteration error is raised when
    # there are no more elements left to
    # iterate through
    except StopIteration:
        break
 
# Sort the data by the number of confirmed cases
data.sort(key = lambda row: row[1], reverse = True)

Para imprimir los datos en formato legible por humanos, usaremos la biblioteca ‘ texttable
 

Python3

# create texttable object
import texttable as tt
table = tt.Texttable()
 
# Add an empty row at the beginning for the headers
table.add_rows([(None, None, None, None)] + data)
 
# 'l' denotes left, 'c' denotes center,
# and 'r' denotes right
table.set_cols_align(('c', 'c', 'c', 'c')) 
table.header((' Country ', ' Number of cases ', ' Deaths ', ' Continent '))
 
print(table.draw())

Producción:
 

+---------------------------+-------------------+----------+-------------------+
|          Country          |  Number of cases  |  Deaths  |     Continent     |
+===========================+===================+==========+===================+
|       United States       |      644348       |  28554   |   North America   |
+---------------------------+-------------------+----------+-------------------+
|           Spain           |      180659       |  18812   |      Europe       |
+---------------------------+-------------------+----------+-------------------+
|           Italy           |      165155       |  21645   |      Europe       |
+---------------------------+-------------------+----------+-------------------+
...


NOTA: La salida depende de las estadísticas actuales
¡Quédese en casa, manténgase seguro!
 

Publicación traducida automáticamente

Artículo escrito por srivathspradeep y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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