dictionary aktualisieren

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Westdeutschland
User
Beiträge: 7
Registriert: Samstag 8. April 2023, 10:37

Hi, das ist mein Code:

Code: Alles auswählen

import time
from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from bs4 import BeautifulSoup

Lehrer = {
  .... # geloescht aus Datenschutzgruenden
}
def extrahieren_lehrer_spalte():
    # Konfigurieren von Selenium
    options = Options()
    options.add_argument("--headless")  # Ausführen im Headless-Modus, um den Browser nicht anzuzeigen
    service = Service('path/to/chromedriver')  # Pfad zum ChromeDriver anpassen
    driver = webdriver.Chrome(service=service, options=options)

    url = 'https://www.jkg-wds.de/Schulintern/Vertretungsplan/EXPORT%20Stundenplan%20SuS%20heute/subst_001.htm'

    driver.get(url)
    time.sleep(2)  # Warten, bis die Seite vollständig geladen ist

    soup = BeautifulSoup(driver.page_source, 'html.parser')

    rows = soup.find('table', {'class': 'mon_list'}).find_all('tr')

    Vertretungsplan_list = []

    thomas = []

    # Extrahiere die Spaltenüberschriften
    for headline in rows[0].find_all('th'):
        thomas.append(headline.text)

    # Durchlaufe alle Zeilen außer der ersten (Überschriftenzeile)
    for row in rows[1:]:
        dic = {}
        for i, cell in enumerate(row.find_all('td')):
            dic[thomas[i]] = cell.text.strip()
            
            if cell.find('s'):  # Überprüfung auf durchgestrichenes Format
                dic[thomas[i]] = dic[thomas[i]].replace("<s>", "").replace("</s>", "")  # Entfernen der Markierung
                
                # Entfernen des Texts hinter den Pfeilen
                arrow_index = dic[thomas[i]].find('→')
                if arrow_index != -1:
                    dic[thomas[i]] = dic[thomas[i]][:arrow_index]
            else:
                dic[thomas[i]] = ""  # Nicht durchgestrichene Lehrernamen entfernen
        
        if dic["(Lehrer)"] != "":
            Vertretungsplan_list.append(dic)

    lehrer_spalte = []

    # Extrahiere die Lehrernamen
    for eintrag in Vertretungsplan_list:
        lehrer = eintrag["(Lehrer)"]
        lehrer_spalte.append(lehrer)

    # Browser und Treiber schließen
    driver.quit()

    return lehrer_spalte

# Funktion aufrufen und das Ergebnis speichern
result = extrahieren_lehrer_spalte()

# Das Ergebnis ausgeben
print(result)

def update_fehlstunden(lehrer_list):
    global Lehrer
    for lehrer in lehrer_list:
        if lehrer in Lehrer:
            Lehrer[lehrer]["Fehlstunden"] += 1

update_fehlstunden(result)

print(Lehrer)



Mein Problem ist, dass das dictionary im Code nicht Aktualisiert wird, wenn ich den code ausführe es wird zwar richtig ausgegeben aber das dictionary wird nicht aktualisiert.

Es würde mich sehr freuen, wenn ihr mir helfen könntet und hoffe, dass das nicht unter "Schulaufgaben machen" fällt.
Sirius3
User
Beiträge: 18227
Registriert: Sonntag 21. Oktober 2012, 17:20

Bei dieser Seite ist selenium nicht nötig. Den Inhalt per requests.get abzurufen ist einfacher und robuster. Variablennamen werden komplett klein geschrieben. Sie enthalten keine kryptischen Abkürzungen und keine Typen im Namen. thomas statt table_header ist so eine kryptische Abkürzungen. Statt dws Index i würde man zip benutzen.
Vergiss gleich wieder, dass es global überhaupt gibt, globale Variablen benutzt man nicht.
Wenn ich dich richtig verstehe, willst Du das Wörterbuch mit den Lehrern gar nicht im Code stehen haben, sondern in einer extra Datei, die Du lesen und schreiben kannst. Als Format bietet sich hier z.B. csv an.
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Hast du das Einverstaendnis der gelisteten Lehrer, dass du ihre Klarnamen und Email ins Netz kippen darfst?

Was das Problem angeht: erwartest du, dass die Aenderung der Datenstruktur zur Laufzeit eine Auswirkung auf den Programmtext hat? Das ist (dankenswerterweise) nicht so. Wenn du nicht jedes mal die Daten abgreifen willst, musst du sie in einer extra Datei zwischenspeichern, zB einer CSV-Datei.
Westdeutschland
User
Beiträge: 7
Registriert: Samstag 8. April 2023, 10:37

wie kann ich das hier schließen um dann nochmal ein neues Thema aufzumachen
Westdeutschland
User
Beiträge: 7
Registriert: Samstag 8. April 2023, 10:37

Ich habe nicht an den Datenschutz gedacht, wie kann ich meinen Ursprünglichen Code löschen, mir wird da nicht zum bearbeiten angezeigt
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich habe den Code bearbeitet, und deine Kopie geloescht. Die Bearbeitung ist nach 15m verboten, um naechtraegliches Verfaelschen zu verhindern. Das ist in einem solchen Fall hier natuerlich kontra-produktiv, aber in der Summe besser. Dafuer sind dann ja Moderatoren wie ich da. Du kannst dazu die Melden-Funktion benutzen, dann ist das besser sichtbar fuer uns.
Antworten