Webscraping: Wie finde ich den richtigen selector für Tabelle

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
ThomasRandus
User
Beiträge: 4
Registriert: Donnerstag 8. Mai 2025, 16:12

Hi ,
ich versuche gerade die Daten von folgender Website zu scrapen:

Tabelle: Historische Kurse und Umsätze DAX etwas weiter unten auf der Seite:
https://www.boerse-frankfurt.de/index/d ... d-umsaetze

Also die Tabelle mit: Datum, Eröffnung, Schluss, Tageshoch

Das Script mit dem ich arbeite sieht so aus:

Code: Alles auswählen

import os
import time
import csv
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Chrome-Optionen für die Verbindung zu einem bereits laufenden Browser
chrome_options = Options()
chrome_options.add_experimental_option("debuggerAddress", "127.0.0.1:9222")

# Passe den Pfad zum ChromeDriver an
driver = webdriver.Chrome(executable_path='chromedriver.exe', options=chrome_options)

target_url = "https://www.boerse-frankfurt.de/index/dax/kurshistorie/historische-kurse-und-umsaetze"

def switch_to_target_tab(driver, url):
    for handle in driver.window_handles:
        driver.switch_to.window(handle)
        if url in driver.current_url:
            return True
    return False

if not switch_to_target_tab(driver, target_url):
    print("Tab nicht gefunden!")
    driver.quit()
    exit()

# Warte, bis die Tabelle geladen ist
# Passe den Selector ggf. an, falls die Seite sich ändert
for _ in range(10):
    try:
        # Mit CSS-Selector nach Klasse:
	table = driver.find_element(By.CSS_SELECTOR, "app-price-history _nghost-boerse-frankfurt-c352035757")
    except:
        time.sleep(2)
else:print("Tabelle nicht gefunden!")
driver.quit()
exit()

rows = table.find_elements(By.TAG_NAME, "tr")[1:]  # Überspringe Kopfzeile

csv_data = []
for row in rows:
    cols = row.find_elements(By.TAG_NAME, "td")
    if len(cols) >= 5:
        datum = cols[0].text.strip()
        eroeffnung = cols[1].text.strip()
        schluss = cols[4].text.strip()
        tageshoch = cols[2].text.strip()
        tagestief = cols[3].text.strip()
        csv_data.append([datum] [eroeffnung] [schluss] [tageshoch] [tagestief])
        ......
        
Das Script läuft nun bis zur Zeile mit:
"table = driver.find_element"

gut durch. Aber es scheitert daran, dass ich nicht hinbekomme wie ich die Tabelle mit den Kursdaten auswählen kann. Meine Versuche mit das "inspect" und "Copy Selctor" für die Tabelle:

Code: Alles auswählen

body > app-root > app-wrapper > div > div > div.content-wrapper > app-index > div.row.ng-star-inserted > div > app-price-history > div.widget.app-loading-spinner-parent.d-block.ar-mt.ar-p > div > div > div.table-responsive > table
hat mit Selenium irgendwie alles nicht so fkt. ich bekomme den Dreh nicht raus wie ich die Tabelle selektiere, das Script endet immer mit der else clause: "Tabelle nicht gefunden". Den ("next" Button bräuchte ich dann auch noch zum weiterblättern).
HTML ist bei mir auch 20 Jahre her aber ich habe das Gefühl dass die Website versucht die Daten zu verstecken und nachlädt. Komme ich da irgendwie anders dran mit beautifulsoup vielleicht? Da sind die Daten ja sonst könnte ich sie im Browser ja nicht sehen...

Wie ihr merkt habe ich davon keine Ahnung :?: Hänge seit gestern daran und wäre für jede Hilfe dankbar!
juergenkulow
User
Beiträge: 2
Registriert: Freitag 6. Juni 2025, 08:09

Code: Alles auswählen

kulow@kulow-G73Jw:~$ python3 /tmp/dax.py
  File "/tmp/dax.py", line 36
    table = driver.find_element(By.CSS_SELECTOR, "app-price-history _nghost-boerse-frankfurt-c352035757")
TabError: inconsistent use of tabs and spaces in indentation
TabError: Inkonsistente Verwendung von Tabulatoren und Leerzeichen bei der Einrückung

Habe alle Leerzeichen in der for-Schleife gelöscht und durch Tabulatoren ersetzt.

Problem gelöst, aber dann gibt es eine neue Fehlermeldung:

Code: Alles auswählen

kulow@kulow-G73Jw:~$ python3 /tmp/dax.py
  File "/tmp/dax.py", line 55
    ......
       ^^^
SyntaxError: invalid syntax
python-forum.de Fehlermeldung "inconsistent use of tabs and spaces in indentation"
Bitte stelle Deine Fragen, denn den Erkenntnisapparat einschalten entscheidet über das einzig bekannte Leben im Universum.

Jürgen Kulow Wersten :D_üsseldorf NRW D Europa Erde Sonnensystem Lokale_Flocke Lokale_Blase Orion-Arm
Milchstraße Lokale_Gruppe Virgo-Superhaufen Laniakea Sichtbares_Universum
Antworten