You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.7 KiB
Python
51 lines
1.7 KiB
Python
import requests
|
|
from bs4 import BeautifulSoup
|
|
import db_model as db
|
|
import datetime
|
|
|
|
|
|
TYP = "prozent_bev"
|
|
URL = "https://countrymeters.info/en/"
|
|
|
|
|
|
def letzten_eintrag_ermitteln(quelle, country_region):
|
|
ts = db.CoronaStatistik.select(
|
|
db.CoronaStatistik.ts).where((db.CoronaStatistik.typ == TYP) &
|
|
(db.CoronaStatistik.quelle == quelle) &
|
|
(db.CoronaStatistik.country_region == country_region)
|
|
).order_by(db.CoronaStatistik.ts.desc()).limit(1).scalar()
|
|
if ts is None:
|
|
ts = datetime.datetime(1970, 1, 1)
|
|
return ts
|
|
|
|
|
|
def auslesen_unverarbeiteter_daten(quelle, land, bev_zahl, CoronaStatistik):
|
|
ts = letzten_eintrag_ermitteln(quelle, land)
|
|
daten = []
|
|
query = db.CoronaDaten.select(db.CoronaDaten.ts, db.CoronaDaten.confirmed).where(
|
|
(db.CoronaDaten.quelle == quelle) & (db.CoronaDaten.country_region == land) & (
|
|
db.CoronaDaten.ts > ts)).namedtuples()
|
|
for datensatz in query:
|
|
prozent_bev = datensatz.confirmed / bev_zahl[land] * 100
|
|
prozent_bev = round(prozent_bev, 8)
|
|
print(f"Im Land {land} {prozent_bev}% infiziert")
|
|
daten.append(CoronaStatistik(datensatz.ts, quelle, land, TYP, prozent_bev))
|
|
return daten
|
|
|
|
|
|
def scrape_bev(land):
|
|
r = requests.get(f"{URL}{land}")
|
|
soup = BeautifulSoup(r.text, features="html5lib")
|
|
table = soup.find("div", {"id": "cp1"})
|
|
try:
|
|
value = table.get_text()
|
|
except AttributeError:
|
|
value = None
|
|
else:
|
|
value = int(value.replace(",", ""))
|
|
return value
|
|
|
|
|
|
if __name__ == "__main__":
|
|
scrape_bev("Germany")
|