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.
Messwerte von Website (lokal) loggen
..und zum parsen der Informationen würde ich dir BeautifulSoup4 empfehlen
-
- User
- Beiträge: 6
- Registriert: Mittwoch 28. Oktober 2020, 12:33
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 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?
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')
Dann müsste doch später nur der Dateipfad durch die richtige Adresse (192.168.0.1) ersetzt werden oder?
@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.
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.
-
- User
- Beiträge: 6
- Registriert: Mittwoch 28. Oktober 2020, 12:33
Du meinst auf dem offline-Laptop mittels
Code: Alles auswählen
import requests
r = requests.get('192.168.0.1')
print(r.text)
Mit Inhalt der Datei laden ohne requests meinst du dann einfaches reinkopieren des auf o.g. Weges erhaltenen Codes?
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.
Das Lesen kriegst du sicher selbst hin
Code: Alles auswählen
with open("sitedata.html", "w", encoding="utf-8") as outfile:
outfile.write(zeichenkette)
-
- User
- Beiträge: 6
- Registriert: Mittwoch 28. Oktober 2020, 12:33
Also das Auslesen und Abspeichern funktioniert mit
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:32764 wäre z.B. der zu loggende Wert.
Der momentane Code sieht so aus (abgeänderte "Vorlage"):
Jemand eine Idee?
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()
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>
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?
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.
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.
-
- User
- Beiträge: 6
- Registriert: Mittwoch 28. Oktober 2020, 12:33
Vielen Dank, habe ich geändert!
Java wird ausgeführt...
Java wird ausgeführt...
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.
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.
-
- User
- Beiträge: 6
- Registriert: Mittwoch 28. Oktober 2020, 12:33
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!
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!