HISinOne-Funktionen

Diese Seite beschreibt die Funktionen aus hexscrapepy.his_scraper. Der Fokus liegt auf browsergesteuertem Scraping in HISinOne: erst Basisdaten laden, dann pro Veranstaltung die Detailseite öffnen und weiter auslesen.

Typischer Ablauf

Wenn du nicht mit Einzelfunktionen arbeiten willst, ist der typische Ablauf sehr einfach:

  1. Mit his_scrape_all_semesters() einen kompletten Lauf starten.
  2. Intern lädt das Paket zuerst die Basisdaten mit his_fetch_base_data().
  3. Danach öffnet es die Suchmaske und ruft die einezlene Kurse mit his_scrape_detail_data_playwright() auf.
  4. Die kleineren his_scrape_*-Funktionen lesen daraus Termine, Inhalte, Module und Studiengänge aus.

Für einen schnellen Gesamtlauf reicht oft schon so etwas:

semesters = [
    "Wintersemester 2025",
    "Sommersemester 2025",
]

results = his_scrape_all_semesters(
    url="https://campus.uni-freiburg.de/qisserver/pages/startFlow.xhtml?_flowId=searchCourseNonStaff-flow&_flowExecutionKey=e1s1",
    semesters=semesters,
    output_dir="data/uni_freiburg",
    headless=False,
    title_col="semesterunabhangiger_titel",
    scraped_title_col="systemtext",
    number_col="nummer",
)

Wenn du nur einen Teil des Workflows brauchst:

  • his_fetch_base_data() ist für die Kursübersicht zuständig
  • his_scrape_detail_data_playwright() ergänzt zu vorhandenen Basisdaten die Detailinformationen
  • his_scrape_* ist die Gruppe der kleineren Extraktionsfunktionen für einzelne Bereiche der Detailseite

Rollen der Funktionen

Öffentlich empfohlen

Funktion Rolle Kurzbeschreibung
his_scrape_all_semesters Wrapper nimmt dir den kompletten HISinOne-Ablauf ab und verarbeitet Basisdaten und Detaildaten für ein oder mehrere Semester
his_fetch_base_data Basisdaten lädt die Trefferliste eines Semesters aus dem HIS und speichert sie als CSV-Datei
his_scrape_detail_data_playwright Detaildaten öffnet für jede Veranstaltung die Detailseite und ergänzt Termine, Inhalte sowie Modul- und Studiengangsdaten
his_start_session Session startet Playwright und öffnet die HISinOne-Startseite im Browser

Modular nutzbar

Funktion Rolle Kurzbeschreibung
his_select_semester_base_data Navigation stellt das gewünschte Semester ein und startet direkt die Suche nach der Kursübersicht
his_select_semester Navigation stellt das Semester in der Suchmaske ein, ohne sofort zu suchen
his_search_and_get_data Extraktion liest die Ergebnisliste über alle Trefferseiten hinweg aus
his_scrape_termine Extraktion liest nur den Terminblock einer Detailseite
his_scrape_inhalte_playwright Extraktion liest die Inhalte aus dem Tab Inhalte
his_scrape_module_studiengaenge_playwright Extraktion liest die Tabellen zu Modulen und Studiengängen einer Detailseite

Intern oder technisch

Funktion Rolle Kurzbeschreibung
his_sanitize_semester_name Helper macht aus einem Semesternamen eine kurze Kennung für Dateinamen und Ordner
his_check_dependencies Helper prüft, ob die nötigen Python-Pakete für den HIS-Lauf vorhanden sind
his_clean_table_prefixes Helper entfernt störende Wiederholungen von Spaltennamen in Tabellenzellen
his_normalize_titles Helper vereinheitlicht Titel für Suche und Resume-Abgleich
normalize_his_text Helper macht HIS-Texte für Vergleiche robuster und besser vergleichbar

Referenz

Komplettes Modul

hexscrapepy.his_scraper

his_check_dependencies()

Prüfe, ob die wichtigsten Abhängigkeiten für den HIS-Workflow verfügbar sind.

Returns:

Type Description

True bei erfolgreichem Import aller geprüften Pakete, sonst False.

his_clean_table_prefixes(df)

Entferne wiederholte Spaltenpräfixe aus HIS-Tabellenzellen.

Manche HIS-Tabellen schreiben den Spaltennamen zusätzlich in jede Zelle. Diese Hilfsfunktion entfernt solche Präfixe spaltenweise.

Parameters:

Name Type Description Default
df

Zu bereinigendes DataFrame.

required

Returns:

Type Description

Dasselbe DataFrame mit bereinigten Zellwerten.

his_fetch_base_data(url, export_path, semester_name='Sommersemester 2025', headless=False)

Lade die HIS-Kursübersicht eines Semesters und speichere sie als CSV.

Diese Funktion ist der typische Einstieg für einen zweistufigen Workflow: erst die Basisdaten laden, danach optional die Detailseiten nachziehen.

Parameters:

Name Type Description Default
url str

Start-URL der HIS-Kursübersicht.

required
export_path str

Zielpfad für die CSV-Datei.

required
semester_name str

Sichtbarer Name des Semesters.

'Sommersemester 2025'
headless bool

Ob Chromium ohne sichtbares Fenster laufen soll.

False

Returns:

Type Description

DataFrame mit den gelesenen Kursen der Übersichtstabelle.

his_normalize_titles(titles_series)

Normalisiere Veranstaltungstitel für Suche und Resume-Abgleich.

Parameters:

Name Type Description Default
titles_series Series

Series mit rohen Veranstaltungstiteln.

required

Returns:

Type Description
Series

Series mit vereinheitlichten Titelstrings.

his_sanitize_semester_name(semester_name)

Erzeuge eine kurze, dateinamen-taugliche Kennung aus einem Semesternamen.

Erkannte Winter- und Sommersemester werden in kompakte Tokens wie wise2024 oder sose2025 umgewandelt. Wenn kein bekanntes Muster passt, wird ein allgemeiner alphanumerischer Fallback (z.B. trimester2026a) erzeugt.

Parameters:

Name Type Description Default
semester_name str

Ursprüngliche sichtbare Semesterbezeichnung.

required

Returns:

Type Description
str

Robuste Kurzkennung für Dateinamen und Ordner.

his_scrape_all_semesters(url='https://zeus.uni-konstanz.de/hioserver/pages/startFlow.xhtml?_flowId=searchCourseNonStaff-flow&_flowExecutionKey=e3s1', export_path_template=None, file_name_template=None, output_dir=None, headless=True, semesters=None, title_col='titel_der_veranstaltung', scraped_title_col='systemtext', number_col='nummer', restart_browser_every=50)

Führe den kompletten HISinOne-Workflow für ein oder mehrere Semester aus.

Für jedes Semester werden zunächst die Basisdaten geladen oder aus einer bereits vorhandenen CSV übernommen. Anschließend werden die Detailseiten der Kurse geöffnet und um zusätzliche Informationen ergänzt.

Parameters:

Name Type Description Default
url str

Start-URL des HISinOne-Systems.

'https://zeus.uni-konstanz.de/hioserver/pages/startFlow.xhtml?_flowId=searchCourseNonStaff-flow&_flowExecutionKey=e3s1'
export_path_template str

Pfadvorlage für Basis-CSV-Dateien mit {sem}.

None
file_name_template str

Pfadvorlage für Detaildaten-Pickles mit {sem}.

None
output_dir str

Zielordner für erzeugte Dateien.

None
headless bool

Ob Chromium ohne sichtbares Fenster laufen soll.

True
semesters list[str]

Liste der zu scrapenden Semesterbezeichnungen.

None
title_col str

Spaltenname für Veranstaltungstitel in den Basisdaten.

'titel_der_veranstaltung'
scraped_title_col str

Spaltenname für den Titelabgleich in bereits gescrapten Detaildaten.

'systemtext'
number_col str

Spaltenname für Veranstaltungsnummern in den Basisdaten.

'nummer'
restart_browser_every int

Browser-Neustart nach dieser Zahl verarbeiteter Kurse.

50

Returns:

Type Description
dict[str, DataFrame]

Dictionary mit Semestername als Schlüssel und gescraptem DataFrame als Wert.

dict[str, DataFrame]

Bei fehlgeschlagenen Semestern kann der Wert None sein.

his_scrape_detail_data_playwright(url, base_data, file_name, semester_name, title_col='titel_der_veranstaltung', scraped_title_col='systemtext', number_col='nummer', sleep_time=0.5, save_every=50, close_browser=True, headless=False, restart_browser_every=50)

Scrape Detaildaten für eine vorhandene HIS-Basistabelle.

Die Funktion sucht jede Veranstaltung erneut im HIS, öffnet die passende Detailseite und ergänzt unter anderem Termine, Inhaltsblöcke sowie Modul- und Studiengangsdaten. Resume-Logik, Checkpoints und automatische Browser-Neustarts sind bereits enthalten.

Parameters:

Name Type Description Default
url str

Start-URL des HISinOne-Systems.

required
base_data DataFrame

Basistabelle mit mindestens Titelspalte und optional Nummer.

required
file_name str

Pfad für Zwischenstände und finale Pickle-Ausgabe.

required
semester_name str

Sichtbarer Name des Zielsemesters im HIS.

required
title_col str

Spaltenname für Veranstaltungstitel in base_data.

'titel_der_veranstaltung'
scraped_title_col str

Spaltenname für den Titelabgleich in vorhandenen Detaildaten.

'systemtext'
number_col str

Spaltenname für Veranstaltungsnummern in base_data.

'nummer'
sleep_time float

Pause zwischen Browseraktionen in Sekunden.

0.5
save_every int

Checkpoint-Intervall in Anzahl erfolgreich verarbeiteter Kurse.

50
close_browser bool

Ob Browser und Playwright am Ende geschlossen werden sollen.

True
headless bool

Ob Chromium ohne sichtbares Fenster laufen soll.

False
restart_browser_every int

Browser-Neustart nach dieser Zahl verarbeiteter Kurse.

50

Returns:

Type Description
DataFrame

DataFrame mit einer Zeile pro gescrapter Veranstaltung und den

DataFrame

zusammengeführten Detaildaten.

his_scrape_inhalte_playwright(page, css_inhalte_tab='#detailViewData\\:tabContainer\\:term-planning-container\\:tabs\\:contentsTab', timeout_ms=10000, empty_timeout_ms=1500)

Lese die Textblöcke aus dem Tab Inhalte einer HIS-Detailseite.

Die Überschriften der Boxen werden dabei in Spaltennamen umgewandelt. Wiederholte Überschriften erhalten Suffixe, damit alle Inhalte in einer gemeinsamen Ergebniszeile gespeichert werden können.

Parameters:

Name Type Description Default
page Page

Aktive Playwright-Seite auf einer Veranstaltungsdetailseite.

required
css_inhalte_tab str

Selektor des Tabs Inhalte.

'#detailViewData\\:tabContainer\\:term-planning-container\\:tabs\\:contentsTab'
timeout_ms int

Maximale Wartezeit für Inhaltsblöcke.

10000
empty_timeout_ms int

Kürzere Wartezeit für Seiten ohne Inhaltsbereich.

1500

Returns:

Type Description
DataFrame

Einzeiliges DataFrame mit den ausgelesenen Textblöcken oder ein leeres

DataFrame

DataFrame, wenn kein Inhalt gefunden wurde.

his_scrape_module_studiengaenge_playwright(page, timeout_ms=10000)

Lese Module und Studiengänge aus einer HIS-Detailseite aus.

Die beiden Tabellen werden als verschachtelte DataFrames in einer einzigen Ergebniszeile abgelegt, damit ihre Tabellenstruktur erhalten bleibt.

Parameters:

Name Type Description Default
page Page

Aktive Playwright-Seite auf einer Veranstaltungsdetailseite.

required
timeout_ms int

Reservierte Zeit für die Extraktion.

10000

Returns:

Type Description
DataFrame

Einzeiliges DataFrame mit verschachtelten Modul- und Studiengangstabellen.

his_scrape_termine(page, root='#detailViewData\\:tabContainer\\:term-planning-container\\:parallelGroupsTab', timeout_ms=10000)

Lese den Terminblock einer HIS-Detailseite aus.

Parameters:

Name Type Description Default
page Page

Aktive Playwright-Seite auf einer Veranstaltungsdetailseite.

required
root str

CSS-Selektor des Termincontainers.

'#detailViewData\\:tabContainer\\:term-planning-container\\:parallelGroupsTab'
timeout_ms int

Maximale Wartezeit für den sichtbaren Terminblock.

10000

Returns:

Type Description
DataFrame

Einzeiliges DataFrame mit Label-Wert-Paaren aus dem Terminbereich.

his_search_and_get_data(page)

Lese die aktuell sichtbare HIS-Ergebnistabelle über alle Seiten hinweg aus.

Die Funktion erwartet, dass bereits eine Trefferliste sichtbar ist. Sie folgt der Pagination und führt alle erfolgreich gelesenen Tabellen zu einem gemeinsamen DataFrame zusammen.

Parameters:

Name Type Description Default
page Page

Aktive Playwright-Seite mit sichtbaren Suchergebnissen.

required

Returns:

Type Description

Gemeinsames DataFrame aller gelesenen Trefferseiten oder None,

wenn keine Tabelle erfolgreich gelesen werden konnte.

his_select_semester(page, semester_name)

Select a semester in the HISinOne dropdown without launching a search.

Parameters:

Name Type Description Default
page

Active Playwright page.

required
semester_name

Visible semester label in the HISinOne UI.

required

his_select_semester_base_data(page, semester_name)

Select a semester and immediately load the result list for base data.

Parameters:

Name Type Description Default
page

Active Playwright page.

required
semester_name

Visible semester label in the HISinOne UI.

required

his_start_session(url, headless=False)

Starte eine Playwright-Session und öffne die HISinOne-Startseite.

Parameters:

Name Type Description Default
url

Ziel-URL des HISinOne-Systems.

required
headless bool

Ob Chromium ohne sichtbares Fenster laufen soll.

False

Returns:

Type Description

Tupel (playwright, browser, page) für die weitere Browsersteuerung.

normalize_his_text(value)

Normalisiere einen HIS-Textwert für robuste Stringvergleiche.

Parameters:

Name Type Description Default
value

Beliebiger Wert aus UI-Texten oder Tabelleninhalten.

required

Returns:

Type Description
str

Kleingeschriebener, whitespace-normalisierter Vergleichsstring.