Werte aus Webseite lesen

Diskutiere Werte aus Webseite lesen im Shell-Skripte Forum im Bereich Programmieren unter Linux/Unix; Wie kann ich von einer Datei die Werte zwischen zwei Begriffen: Celsius_1: und <br /> per bash auslesen? In diesem Beispiel sollte der Wert...

  1. #1 itworker, 06.08.2017
    Zuletzt bearbeitet: 06.08.2017
    itworker

    itworker Grünschnabel

    Dabei seit:
    06.08.2017
    Beiträge:
    4
    Zustimmungen:
    0
    Wie kann ich von einer Datei die Werte zwischen zwei Begriffen:
    Celsius_1:
    und <br /> per bash auslesen?
    In diesem Beispiel sollte der Wert 23.94 ausgegeben werden.

    HTML:
    <!DOCTYPE HTML>
    <html>
    Temperature Celsius_1:23.94<br />
    </html>
    
    Leider habe ich keinen Plan wo man da ansetzt.
     
  2. #2 jakobus.schuerz, 06.08.2017
    jakobus.schuerz

    jakobus.schuerz Grünschnabel

    Dabei seit:
    10.11.2016
    Beiträge:
    4
    Zustimmungen:
    0
    html2text oder so ähnlich gibts. Google mal danach.

    Gesendet von meinem HTC 10 mit Tapatalk
     
  3. #3 itworker, 06.08.2017
    Zuletzt bearbeitet: 06.08.2017
    itworker

    itworker Grünschnabel

    Dabei seit:
    06.08.2017
    Beiträge:
    4
    Zustimmungen:
    0
    Die Daten liegen bereits als Text vor.
    wget 192.168.123.192/index.php
     
  4. #4 Programmer78, 06.08.2017
    Programmer78

    Programmer78 Doppel-As

    Dabei seit:
    28.11.2007
    Beiträge:
    110
    Zustimmungen:
    2
    Hilfreich für soetwas sind "grep" "egrep" "cut" oder "awk". In deinem Falle würde
    Code:
    egrep -o "\-?[0-9]{1,2}\.[0-9]{1,2}" index.php
    genügen
     
  5. #5 itworker, 06.08.2017
    Zuletzt bearbeitet: 06.08.2017
    itworker

    itworker Grünschnabel

    Dabei seit:
    06.08.2017
    Beiträge:
    4
    Zustimmungen:
    0
    Danke für Deine Antwort. Deinen Code habe ich verwendet.

    Habe meine Lösung nun fast fertig.

    1. Arduino mit Ethernet Shield fungiert als Webserver und hat 3 Temperatursensoren.
    2. Zabbix liest per Script die Werte des 1. Sensors ein und gibt per Mail Alarm, wenn die Temperaturschwelle überschritten ist.

    Code:
    #!/bin/bash
    content=$(wget 192.168.123.192 -q -O -)
    echo $content>/tmp/content.txt
    foo=($(egrep -o "\-?[0-9]{1,2}\.[0-9]{1,2}"  '/tmp/content.txt'))
    
    #1. Temperaturert
    echo ${foo[0]}
     
  6. #6 Programmer78, 07.08.2017
    Programmer78

    Programmer78 Doppel-As

    Dabei seit:
    28.11.2007
    Beiträge:
    110
    Zustimmungen:
    2
    Ein bisschen sehr kompliziert, da du erst den Quelltext der Webseite mit wget in eine Variable packst. Die Variable nutzt du dann nur, um den Inhalt dieser in eine Datei zu packen (das kann wget auch mit -O /tmp/content.txt direkt). Dann machst du eine nächste Variable auf um darin das Suchergebnis zu speichern. Danach lässt du die Variable anzeigen. Falls temporäre Dateien nötig sind, diese zum Schluss wieder löschen. Es bietet sich auch an, solche kurzlebigen Dateien in den Arbeitsspeicher (dev/shm/content.txt) zu schreiben, um die Festplatte zu schonen.

    Viele Wege führen nach Rom sagt man, vieles funktioniert auch auf komplizierter Art aber man sollte immer sehen, dass man es so unkompliziert wie möglich hält. Das kommt dann mit der Zeit, wenn man immer mehr Funktionen kennenlernt. So wie es bei dir aussieht, kennst du die Möglichkeit der Pipe noch nicht. Die Pipe leitet die Ausgabe vom Befehl links neben der Pipe zu den Befehl rechts neben der Pipe. Befehl1 | Befehl2

    Du könntest also ganz einfach schreiben
    Code:
    #!/bin/bash
    #1. Temperaturwert
    wget 192.168.123.192 -q -O - | egrep -o "\-?[0-9]{1,2}\.[0-9]{1,2}"
    Um so mehr Funktionen und "Tricks" man kennt, umso kürzer wird später das Programm/Skript.
     
    Pik-9 gefällt das.
  7. #7 itworker, 13.08.2017
    itworker

    itworker Grünschnabel

    Dabei seit:
    06.08.2017
    Beiträge:
    4
    Zustimmungen:
    0
    Gratulation, dies ist eine schöne Idee. Für diese Webseite passt es auch richtig gut.

    Trotzdem würde ich gern wissen, wie ein Wert zwischen zwei Kennern ausgelesen werden kann.
    Mit einer Google Suche "Bash Substring" finde ich keine Erfolge.
     
  8. #8 Pik-9, 14.08.2017
    Zuletzt bearbeitet: 14.08.2017
    Pik-9

    Pik-9 Tripel-As

    Dabei seit:
    04.12.2008
    Beiträge:
    189
    Zustimmungen:
    2
    Du kannst die Zeile mit sed durch die Zahl ersetzen:
    Code:
    grep "Celsius_1" <(curl -s 192.168.123.192/index.php) | sed 's/.*Celsius_1:\([[:digit:].]\+\)<br.*/\1/g'
    Viele Grüße,
    Pik-9
     
  9. #9 Programmer78, 14.08.2017
    Programmer78

    Programmer78 Doppel-As

    Dabei seit:
    28.11.2007
    Beiträge:
    110
    Zustimmungen:
    2
    Hallo Itworker, ich hatte dir doch weitere Recherche-Begriffe mit auf dem Weg gegeben (Posting #4). Wenn du da nicht ansetzt und G**gle nicht richtig fütterst, können wir ja nichts dafür. Um so mehr Wörter man in Suchmaschinen angibt, umso besser kann auch das Suchergebnis aussehen.

    "bash substring"... tja, sollte schon ein Zufall sein, wenn g**gle da eine genaue Lösung zu deinem Problem aufzeigt... Die zwei Wörter hättest du auch einen Linuxexperten gegen den Kopf schmeißen können, da wäre nicht mehr wie ein Schulterzucken bei herumgekommen.

    Es gibt auch Seiten, die dir zeigen, wie man eine Suchmaschine richtig bedient. Wenn du schon auf Englisch suchst, kannst du auch ausführlicher werden, "unix bash between two chars" "linux bash between two characters" vielleicht zusätzlich mit grep egrep cut awk, was ich schon sagte. Generell sollte man mehr wie zwei Wörter angeben, G**gle nimmt auch mehr wie 10 Wörter entgegen.

    Im Terminal kannst du auch Anleitungen zu Befehlen finden, du gibst einfach
    Code:
    man befehl1
    ein. Das "man" bedeutet manual/Anleitung. Sollte alles auf Englisch sein - es gibt auch Deutsche Manualseiten, die kann man sich nachinstallieren. Wenn wget bei dir schon funktioniert, sind die Manualseiten von wget auch mitinstalliert. Gib einfach mal "man wget" ein. Beenden mit q.

    Code:
    ZeichenDavor=":"
    ZeichenDanach="<"
    SuchenInZeile="Celsius"
    
    wget 192.168.123.192 -q -O - | grep "$SuchenInZeile" | cut -d $ZeichenDavor -f 2 | cut -d $ZeichenDanach -f 1
    oder

    Code:
     wget 192.168.123.192 -q -O - | grep "$SuchenInZeile" | awk -F':|<' '{ print $2 }' 
    Code:
     wget 192.168.123.192 -q -O - | grep "$SuchenInZeile" | awk -F''"$ZeichenDavor"'|'"$ZeichenDanach"'' '{ print $2 }' 
    Es gibt viele Möglichkeiten das zu lösen (siehe Suchmaschine), hier mal zwei einfache, die man doch noch halbwegs beim Lesen versteht, ich glaube, darauf kommt es dir an. Dir helfen ersteinmal keine kryptisch aussehenden Befehlsketten, du willst sehen wie was funktioniert. Auf kurz oder lang wirst du aber zu immer komplizierteren regulären Ausdrücken gelangen. Also oben mal einfache durchschaubare Befehlsketten. Die Variablen habe ich mal gesetzt, damit du den Code besser verstehst. Aber wie in diesem Thread schon zu sehen ist, kann man unter bestimmten Voraussetzungen auch anders filtern, egal welches Zeichen links oder rechts steht und dadurch den Code wesentlich kürzer gestalten.
     
Thema:

Werte aus Webseite lesen

Die Seite wird geladen...

Werte aus Webseite lesen - Ähnliche Themen

  1. Free Software Foundation bewertet Codehosting-Dienste

    Free Software Foundation bewertet Codehosting-Dienste: Die Free Software Foundation (FSF) hat Bewertungen nach den selbst definierten Richtlinien für mehrere Codehosting-Dienste herausgegeben....
  2. Mit bash Skript bestimmte Werte aus Tabelle lesen

    Mit bash Skript bestimmte Werte aus Tabelle lesen: Hallo! Ich beschäftige mich erst seit Kurzem mit bash und bin deshalb noch nicht so fit darin. Und nun habe ich schon ein kleines Problem und...
  3. Logs von debsecan, tiger, chkrootkit richtig auswerten.

    Logs von debsecan, tiger, chkrootkit richtig auswerten.: Hallo! ich habe debsecan drüber laufen lassen und der zeigt mir einen Haufen an low/medium/high urgency an, mit oder ohne remotly exploitable....
  4. Wertebereich ersetzen mit sed

    Wertebereich ersetzen mit sed: Hallo Forenmitglieder, ich habe ein kleines Problem mit sed und zwar möchte ich in einer Datei mit mehren Spalten und Zeilen das Vorkommen eines...
  5. Jasper: Sprachsteuerung für preiswerte Rechner

    Jasper: Sprachsteuerung für preiswerte Rechner: Charlie Marsh und Shubhro Saha, Studenten der Princeton-Universität, haben mit Jasper eine Open-Source-Anwendung veröffentlicht, mit deren Hilfe...