2020-09-11 20:25:05 +00:00
|
|
|
"""
|
|
|
|
This is to show simple COVID19 info fetching from worldometers site using lxml
|
|
|
|
* The main motivation to use lxml in place of bs4 is that it is faster and therefore
|
|
|
|
more convenient to use in Python web projects (e.g. Django or Flask-based)
|
|
|
|
"""
|
|
|
|
|
2023-08-09 07:55:30 +00:00
|
|
|
from typing import NamedTuple
|
2020-09-11 20:25:05 +00:00
|
|
|
|
|
|
|
import requests
|
2024-04-02 19:29:34 +00:00
|
|
|
from lxml import html
|
2020-09-11 20:25:05 +00:00
|
|
|
|
|
|
|
|
2023-08-09 07:55:30 +00:00
|
|
|
class CovidData(NamedTuple):
|
|
|
|
cases: int
|
|
|
|
deaths: int
|
|
|
|
recovered: int
|
2020-09-11 20:25:05 +00:00
|
|
|
|
2023-08-09 07:55:30 +00:00
|
|
|
|
|
|
|
def covid_stats(url: str = "https://www.worldometers.info/coronavirus/") -> CovidData:
|
2020-09-11 20:25:05 +00:00
|
|
|
xpath_str = '//div[@class = "maincounter-number"]/span/text()'
|
2024-04-21 17:34:18 +00:00
|
|
|
return CovidData(
|
|
|
|
*html.fromstring(requests.get(url, timeout=10).content).xpath(xpath_str)
|
|
|
|
)
|
2020-09-11 20:25:05 +00:00
|
|
|
|
|
|
|
|
|
|
|
fmt = """Total COVID-19 cases in the world: {}
|
|
|
|
Total deaths due to COVID-19 in the world: {}
|
|
|
|
Total COVID-19 patients recovered in the world: {}"""
|
|
|
|
print(fmt.format(*covid_stats()))
|