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.