Seite 1 von 1

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

Verfasst: Samstag 14. Juni 2025, 14:45
von ThomasRandus
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!

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

Verfasst: Sonntag 15. Juni 2025, 06:30
von juergenkulow

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"