[docs]def_parse_metrics(self,driver):metric_candidates=_find_potential_metrics(driver)metrics_raw_mapping={"Primera dosis":"people_vaccinated","Cantidad total de dosis administradas":"total_vaccinations","Población completamente vacunada":"people_fully_vaccinated","Dosis de refuerzo":"total_boosters",}metrics={}formetricinmetric_candidates:forold,newinmetrics_raw_mapping.items():ifold==metric["name"]:metrics[new]=clean_count(metric["value"])iflen(metrics)!=4:raiseValueError(f"Some metrics are missing! Currently we have {metrics.keys()}")returnmetrics
[docs]def_parse_date(self,driver):dt_candidates=[e.textforeindriver.find_elements_by_tag_name("h3")]fordt_candidateindt_candidates:if"Estadísticas nacionales | Acumulados"indt_candidate:returnclean_date(dt_candidate,"Estadísticas nacionales | Acumulados al %d de %B de %Y",lang="es")
[docs]def_find_h3(driver):elem=[eforeindriver.find_elements_by_tag_name("h3")ifre.search(r"Estadísticas nacionales \| Acumulados al \d+ de \w+ de 20\d\d",e.text)]iflen(elem)==1:elem=elem[0]else:raiseValueError("More than one element found!")returnelem
[docs]def_find_potential_metrics(driver):h3=_find_h3(driver)elems=_find_potential_metric_elements(h3)# Filter only those with two div childrenelems=[eeforeinelemsiflen(ee:=e.find_elements_by_tag_name("div"))==2]metrics=[]foreinelems:foreeine:ifmatch:=re.search(r"[\d,]+",ee.text):value=match.group()else:name=ee.textmetrics.append({"name":name,"value":value,})returnmetrics