fbpx
Lección Progreso
0% Completado

Sitio al que vamos a extraer los datos: https://www.bbc.com/news/world-51235105

La estructura es la siguiente

Países:

table.core tbody tr.core__row td.core__region

Casos y Muertes:

table.core tbody tr.core__row td.core__value

Ahora traeremos los datos con response.css():

Países:

response.css("table.core tbody tr.core__row td.core__region::text").getall()

Cases y Muertes

response.css("table.core tbody tr.core__row td.core__value::text").getall()

Haremos una limpieza al momento de traerla para tener solo el texto y almacenarla en una variable:

countries = [ x.strip() for x in response.css("table.core tbody tr.core__row td.core__region::text").getall()]
values = [x.strip() for x in response.css("table.core tbody tr.core__row td.core__value::text").getall()]

Ahora dividiremos la lista de values, para poder poner tener dos listas, una de casos y otra de muertes:

Hagamos algo interesante, convirtamos los datos extraído de casos y muertes en números ¿Cómo lo haríamos?

values_convert =[]
[values_convert.append(int(x.replace(",","") if x !="" else 0 ))  for x in values]

Muy bien, tal vez te preguntes qué hacemos en la línea anterior, vamos por partes.

Usamos nuestra list comprehension para agregar los valores de la lista values, a nuestra lista values_convert, y justo cuando va a agregarlo hacemos la conversión con int() pero como existen valores en blanco usamos un operador ternario el cual es este:

if x !="" else 0

Básicamente le estamos diciendo que si la condición no se cumple que asigne 0  a x y en la lista será 0 siempre y cuando el valor de x sea diferente de “”

¡Perfecto! con esto tenemos nuestros valores convertido de tipo int.

cases = []
for x in range(0, len(values_convert), 2):
    cases.append(values_convert[x])

Ahora haremos lo mismo para las muertes:

deaths =[]
for x in range(1, len(values_convert), 2):
    deaths.append(values_convert[x])

Excelente ahora tenemos todos los datos que necesitamos y convertidos a int, ahora vamos pasar con nuestro proyecto.