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")