Wie bekomme ich diesen Wert mit BS4?
Seite: Pegelstand Salzach, Mittersill (pegelalarm.at)
HTML Code:
from re import S
import requests
from bs4 import BeautifulSoup
import csv
URL = "https://pegelalarm.at/paw/chart.html?commonid=203075-at"
r = requests.get(URL)
soup = BeautifulSoup(r.content, 'html5lib')
value = soup.find('div', attrs = {'id':'d2l2'}).get_text()
print(value)
Ouptut:
{{station.yvalue|numberpa}} {{yUnit}}
Ich habe schon alles probiert bekomme aber immer statt dem Wert "257 cm" den Output {{station.yvalue|numberpa}} {{yUnit}}.
Hoffe es kann mir jemand weiterhelfen :)
2 Antworten
Vom Fragesteller als hilfreich ausgezeichnet
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
Pentester, Datenretter & IT-Forensiker
Der Code tut was er soll:
>>> soup.find('div', attrs = {'id':'d2l2'})
<div class="wordbreak" id="d2l2">
<span>
<b>{{station.yvalue|numberpa}} {{yUnit}}</b>
</span>
</div>
Dein Problem ist, dass die Seite die Daten mit JS-Code nachträglich lädt. Requests lädt also nur den HTML-Code mit den Platzhaltern, führt aber nicht den JS-Code aus um diese mit Daten zu überschreiben...
Ich würde Selenium (https://selenium-python.readthedocs.io/) verwenden und einen Browser fernsteuern. Dann sollte das Auslesen klappen!
Woher ich das weiß:Berufserfahrung
Von gutefrage auf Grund seines Wissens auf einem Fachgebiet ausgezeichneter Nutzer
programmieren, Python
Das wird wahrscheinlich mit js dynamisch da reingeladen. Musst das also irgendwie anders lösen. Z.b. mit Selenium.
Woher ich das weiß:Studium / Ausbildung – Informatikstudent