[docs]classLaos:location="Laos"units="tests performed"source_label="Ministry of Health"notes=""_source_url="https://www.covid19.gov.la/index.php"regex={"tests":r"ຮັບການກວດມື້ນີ້ (\d+)","date":r"ຂໍ້ມູນ ເວລາ .*? (\d+\/\d+\/\d+)",}
[docs]defread(self)->pd.Series:"""Reads data from source."""soup=get_soup(self._source_url)data=self._parse_data(soup)returnpd.Series(data)
[docs]def_parse_data(self,soup:BeautifulSoup)->dict:"""Gets data from the source page."""# Extract the relevant elementelem=self._get_relevant_element(soup)# Extract the text from the elementtext=self._get_text_from_element(elem)# Extract the metricsdaily_change=self._parse_metrics(text)# Extract datedate=self._parse_date(text)record={"source_url":self._source_url,"date":date,"daily_change":daily_change,}returnrecord
[docs]def_get_relevant_element(self,soup:BeautifulSoup)->element.Tag:"""Gets element from the soup."""elem=soup.find("section",{"id":"aa-blog-archive"})ifnotelem:raiseTypeError("Website Structure Changed, please update the script")returnelem
[docs]def_get_text_from_element(self,elem:element.Tag)->str:"""Gets text from element."""returnelem.text.replace("\n"," ").replace(",","")
[docs]def_parse_metrics(self,text:str)->int:"""Gets metrics from the text."""count=re.search(self.regex["tests"],text).group(1)returnclean_count(count)
[docs]def_parse_date(self,text:str)->str:"""Gets date from the text."""date=re.search(self.regex["date"],text).group(1)returnclean_date(date,"%d/%m/%Y")
[docs]defexport(self):"""Exports data to csv."""data=self.read()increment(sheet_name=self.location,country=self.location,units=self.units,date=data["date"],source_url=data["source_url"],source_label=self.source_label,daily_change=data["daily_change"],)