[docs]classMoldova:location="Moldova"units="tests performed"source_label="Ministry of Health of the Republic of Moldova"notes=""source_url="https://msmps.gov.md/media/comunicate/"regex={"title":r"(cazuri noi de COVID-19)|(cazuri de COVID-19)|(cazuri de COVID-19,)","date":r"(\d+\/\d+\/\d+)","count":r"((\d+)) teste.|(\d+) de teste",}# Initial value for cumulative total: 364317
[docs]defread(self)->pd.Series:"""Read data from source."""soup=get_soup(self.source_url)data=self._parse_data(soup)returnpd.Series(data)
[docs]def_parse_data(self,soup:BeautifulSoup)->tuple:"""Get data from the source page."""# Get relevant elementurl=self._get_relevant_element(soup)# Extract URL from element# url = self._parse_link_from_element(elem)# Extract text from urltext=self._get_text_from_url(url)# Extract date from textdate=self._parse_date_from_text(text)# # Extract metrics from textdaily_change=self._parse_metrics(text)record={"source_url":url,"date":date,"daily_change":daily_change,}returnrecord
[docs]def_get_relevant_element(self,soup:BeautifulSoup)->element.Tag:"""Get the relevant element in news feed."""forainsoup.find_all("a",class_="list__news_item-link font__bigger"):if"cazuri"ina.get("href"):link=a.get("href")ifnotlink:raiseValueError("No data found, Please check the source.")returnlink
[docs]def_get_text_from_url(self,url:str)->str:"""Extract text from the url."""text=get_soup(url).get_text()text=text.replace("-","").replace(",","")text=re.sub(r"(\d)\s(\d)",r"\1\2",text)returntext
[docs]def_parse_date_from_text(self,text:str)->str:"""Get date from text."""match=re.search(self.regex["date"],text)ifnotmatch:raiseValueError("No date found, Please check the source.")date=clean_date(match.group(1),"%d/%m/%Y",as_datetime=True)-pd.Timedelta(days=1)returnstr(date.date())
# def _parse_link_from_element(self, elem: element.Tag) -> str:# """Get link from relevant element."""# link = elem.get("href")# return link
[docs]def_parse_metrics(self,text:str)->int:"""Get metrics from news text."""count=clean_count(re.search(self.regex["count"],text).group(0))returncount
[docs]defexport(self):"""Export 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"],count=pd.NA,)