Data Scraping: Wieso wird keine Auslastung angegeben?
Hi,
mein Fitnessstudio hat auf seiner Webseite einen Zähler, wie viele freie Plätze es gibt. ich wollte mir diese "scrapen" und einen Graph erstellen, sodass ich weiß, wann am wenigsten los ist.
Ich habe folgenden Code geschrieben:
from bs4 import BeautifulSoup
import requests
import pandas as pd
import time
url = "https://www.jumpers-fitness.com/studios/augsburg-haunstetten"
try:
while True:
response = requests.get(url)
soup = BeautifulSoup(response.content, "html.parser")
auslastung_element = soup.find("span", class_="js-free-spots")
if auslastung_element is None:
print("Das Auslastungselement wurde nicht gefunden.")
else:
auslastung = auslastung_element.text.strip()
print(auslastung)
timestamp = pd.Timestamp.now()
data = pd.DataFrame({"Timestamp": [timestamp], "Auslastung": [auslastung]})
data.to_csv("auslastung.csv", mode="a", index=False, header=False)
time.sleep(60) # 1 Stunde = 3600 Sekunden
except Exception as e:
print("Fehler aufgetreten:", e)
input("Drücke Enter, um das Programm zu beenden.")
Dieser funktioniert aber nicht und gibt keine Auslastung an.
Kann mir jemand helfen?
Danke
dieser funktioniert aber nicht
Das ist keine sinnvoll verwertbare Fehlerbeschreibung. Was erwartest du, was passiert stattdessen?
es gibt keine auslastung an, also einfach nichts
1 Antwort
soup = BeautifulSoup(response.content, "html.parser")
auslastung_element = soup.find("span", class_="js-free-spots")
Dank deiner hochpräzisen Fehlerbeschreibung kann man nur raten, aber ich vermute mal aus Lebenserfahrung und der Bezeichnung "js-free-spots", dass das Element, das du hier abfragen willst, durch JavaScript-Code befüllt wird.
Mit einem einfachen HTML-Parser läuft natürlich kein JavaScript, somit gibt's auch keinen Inhalt.
Die übliche Alternative ist es dann, einen Browser "headless" fernzusteuern. Selenium war/ist dafür recht beliebt. Der eigentliche Scraping-Code ist dann mehr oder weniger derselbe.
Alternativ kannst du natürlich auch versuchen rauszufinden, woher der Javascript-Code die Daten kriegt und diese Quelle direkt anzapfen. Wer weiß, vielleicht spart dir das dann sogar das Scraping.