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:
- Mit
his_scrape_all_semesters()einen kompletten Lauf starten. - Intern lädt das Paket zuerst die Basisdaten mit
his_fetch_base_data(). - Danach öffnet es die Suchmaske und ruft die einezlene Kurse mit
his_scrape_detail_data_playwright()auf. - 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ändighis_scrape_detail_data_playwright()ergänzt zu vorhandenen Basisdaten die Detailinformationenhis_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 |
|---|---|
|
|
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 |
None
|
file_name_template
|
str
|
Pfadvorlage für Detaildaten-Pickles mit |
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 |
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 |
'titel_der_veranstaltung'
|
scraped_title_col
|
str
|
Spaltenname für den Titelabgleich in vorhandenen Detaildaten. |
'systemtext'
|
number_col
|
str
|
Spaltenname für Veranstaltungsnummern in |
'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 |
'#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 |
|
|
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 |
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. |