Seite 1 von 1
Messwerte von Website (lokal) loggen
Verfasst: Mittwoch 28. Oktober 2020, 14:14
von Darkskater
Hallo zusammen,
folgende Situation:
Zwei Sensoren erfassen einen Messwert (Distanz) und geben diesen über eine "lokale Website" (192.168.0.1) wieder aus. Der dort angezeigte Wert wird händisch alle 2min dokumentiert.
Ist natürlich extrem umständlich...
Gesuchte Lösung:
Ein Skript o.Ä., welches den angezeigten Messwert im 2min Takt automatisch protokolliert. Bestenfalls in einem Format, welches ein einfaches Importieren in Excel ermöglicht.
Hat da jemand Tipps oder kann sonst irgendwie weiterhelfen?
Würde mich sehr freuen.

Re: Messwerte von Website (lokal) loggen
Verfasst: Mittwoch 28. Oktober 2020, 14:24
von Sirius3
Zum Lesen von Webseiten gibt es das requests-Modul.
Re: Messwerte von Website (lokal) loggen
Verfasst: Mittwoch 28. Oktober 2020, 14:27
von Jankie
..und zum parsen der Informationen würde ich dir
BeautifulSoup4 empfehlen
Re: Messwerte von Website (lokal) loggen
Verfasst: Freitag 30. Oktober 2020, 09:18
von Darkskater
Vielen Dank schon mal!
Also requests und BeautifulSoups habe ich jetzt auch schon ergoogelt. Allerdings hapert es bei der Installierung / Importierung in VS Code.
Habe auch nur rudimentäre Grundkenntnisse (1 Modul im Studium, wo mal ein bischen mit Schleifen etc. programmiert wurde).
Eine Grundsätzliche Frage:
Der Arbeitsplatz wo der Laptop (offline) zum Auslesen dieser beiden Sensoren steht ist etwas "ungünstig" für längere Aufenthalte.
Ich habe mir also die Website mit "Seite speichern unter" auf meinen Arbeitslaptop gezogen (file:///C:/Users/.../Desktop/F%C3%BCllstandssensoren/...../XXXXX.htm).
Wenn ich jetzt mit "Vorlagen" aus dem Netz arbeite, kann ich den Pfad der htm-Datei z.B. einfach so einfügen
Code: Alles auswählen
r = requests.get('file:///C:/Users/.../Desktop/F%C3%BCllstandssensoren/...../XXXXX.htm')
um das Ganze zu testen? Auf der lokal gespeicherten Website ist ein Wert in dem auszulesende Feld eingetragen.
Dann müsste doch später nur der Dateipfad durch die richtige Adresse (192.168.0.1) ersetzt werden oder?
Re: Messwerte von Website (lokal) loggen
Verfasst: Freitag 30. Oktober 2020, 09:30
von sparrow
@Darkskater: Wenn du eine Seite speicherst, hat dein Browser sie bereits für die Darstellung interpretiert. Es kann also sein, dass die sich signifikant von dem unterscheidet, was du bekommst, wenn du die Seite direkt abrufst.
Soweit ich weiß, kann requests keine lokalen Dateien "anfragen".
Ich würde die Seite auf dem "offline"-Laptop abfragen und das Ergebnis der Abfrage in einer Datei speichern.
Auf deinem Enwitklungssystem lädst du dann an der Stelle, wo eigentlich das Ergebnis von requests ankommen soll, den Inhalt der Datei ganz ohne requests und lässt darauf bs4 arbeiten.
Auf dem Produktivsystem benutzt du dann requests.
Und für beides baust du einen Schalter ein, damit du das Verhalten switchen kannst.
Re: Messwerte von Website (lokal) loggen
Verfasst: Freitag 30. Oktober 2020, 09:39
von Darkskater
sparrow hat geschrieben: Freitag 30. Oktober 2020, 09:30
...Ich würde die Seite auf dem "offline"-Laptop abfragen und das Ergebnis der Abfrage in einer Datei speichern....
Du meinst auf dem offline-Laptop mittels
Code: Alles auswählen
import requests
r = requests.get('192.168.0.1')
print(r.text)
und das Ganze dann einfach per Strg+C z.B. in einer .txt speichern?
sparrow hat geschrieben: Freitag 30. Oktober 2020, 09:30
...Auf deinem Enwitklungssystem lädst du dann an der Stelle, wo eigentlich das Ergebnis von requests ankommen soll, den Inhalt der Datei ganz ohne requests und lässt darauf bs4 arbeiten.....
Mit Inhalt der Datei laden ohne requests meinst du dann einfaches reinkopieren des auf o.g. Weges erhaltenen Codes?
Re: Messwerte von Website (lokal) loggen
Verfasst: Freitag 30. Oktober 2020, 09:46
von sparrow
Na, du hast doch eine Programmiersprache vor dir. Und eine Zeichenkette, und nichts anderes ist das Resultat von requests .content, kann man problemlos in eine Datei speichern und auch wieder laden.
Code: Alles auswählen
with open("sitedata.html", "w", encoding="utf-8") as outfile:
outfile.write(zeichenkette)
Das Lesen kriegst du sicher selbst hin

Re: Messwerte von Website (lokal) loggen
Verfasst: Montag 2. November 2020, 16:01
von Darkskater
Also das Auslesen und Abspeichern funktioniert mit
Code: Alles auswählen
import requests
r = requests.get('http://192.168.0.1/#!page=configuration&preventback=true')
print(r.status_code) #200 = connected
with open("sitedata.html", "w", encoding="utf-8") as outfile:
outfile.write(r.text)
outfile.close()
nur so halb....
Ich lande beim Öffnen der Datei bloß auf der "Startseite" der Weboberfläche und nicht dort, wohin der Link eigentlich führen soll. Auch finde ich im Code nicht die markanten Stellen, wie ich sie im "Original" finde:
Code: Alles auswählen
<div class="measuredvalue-value"><span class="sjs-translation" data-identifier="32764" data-defaulttext="32764" data-arguments="">32764</span></div>
32764 wäre z.B. der zu loggende Wert.
Der momentane Code sieht so aus (abgeänderte "Vorlage"):
Code: Alles auswählen
import requests
import csv
from bs4 import BeautifulSoup
url = "http://192.168.0.1/#!page=configuration&preventback=true"
response = requests.get(url)
html = BeautifulSoup(response.text, 'html.parser')
quotes_html = html.find_all('span', class_="measured")
quotes = list()
for quote in quotes_html:
quotes.append(quote.text)
with open('./fuellstaende.csv', 'w') as csv_file:
csv_writer = csv.writer(csv_file, dialect='excel')
csv_writer.writerows(zip(quotes))
Jemand eine Idee?

Re: Messwerte von Website (lokal) loggen
Verfasst: Montag 2. November 2020, 16:12
von sparrow
Ich würde statt .test eher .content verwenden.
Warum du nur auf der Startseite landest, lässt sich nur schwer diagnostizieren. Ich schrieb ja schon, dass es sein kann, dass die Seite durch den Browser anders dargestellt wird. Zum Beispiel, weil im Browser Javascript ausgeführt wird.
Um das herauszufinden musst du die Seite mit deinem Browser diagnostizieren.
Re: Messwerte von Website (lokal) loggen
Verfasst: Montag 2. November 2020, 16:34
von Darkskater
Vielen Dank, habe ich geändert!
Java wird ausgeführt...
Re: Messwerte von Website (lokal) loggen
Verfasst: Montag 2. November 2020, 16:39
von sparrow
Java oder Javascript?
Wenn Javascript ausgeführt wird, musst du im Browser protokollieren, welche Aufrufe vorgenommen werden und schauen, ob du die Daten direkt abrufen kannst.
Mit den Webmaster-Werkzeugen (so heißen die, glaube ich) im Browser sollte das gehen.
Wenn alle Stricke reißen kann man mit Selenium auch noch große Geschütze auffahren, aber ich würde es zuerst ohne versuchen.
Re: Messwerte von Website (lokal) loggen
Verfasst: Montag 2. November 2020, 16:44
von Darkskater
Erstmal Danke für die Hilfe!
Also es handelt sich um Javascript. Ich kann das Ganze leider nur nebenbei machen, also bitte entschuldigt, wenn es mal etwas dauert.
Ich werde mich um den von dir genannten Punkt als nächstes kümmern!