Auslesen ständig aktualisierender Werte auf Webseite. Wie?



  • Hallo an alle!

    Folgende Situation:
    Sagen wir, auf einer Internetseite sind Preise für Edelmetalle angegeben, die sich jeweils in einem Div-Container mit eindeutiger Bezeichnung (IDs, oder auch eindeutigen(!) Namen) befinden, sprich vereinfacht:

    [...]
    <div id="price_gold">
    1360
    </div>
    [...]
    <div id="price_silver">
    20
    </div>
    [...]
    

    Info: Es handelt sich um eine reine HTML-Datei, kein PHP, keine ersichtliche Verbindung zu einer Datenbank, oder ähnliches.

    Ziel: Ich möchte jetzt diese Preise gerne kontinuierlich auslesen.

    Bisheriges Vorgehen:
    Das Hauptprogramm war in C++ geschrieben. Mittels system-Command habe ich die Quelldatei gecurlt und dann zeilenweise bis zu den eindeutigen Identifiern gelesen. Eine Zeile weiter kommt dann stets der Preis.

    Warum reicht das nicht?
    Vorab: Das ganze funktioniert zuverlässig und ist einfach. Oftmals handelt es sich bei den Webseiten jedoch um "große" Quelldateien, d.h. wenn ich jedes mal 4-6 MB Curle um 5 Zahlen zu bestimmen, dann kostet mich das eine Menge Laufzeit.

    FRAGE 1: Wie aktualisiert der Browser die Darstellung?
    Da sich die die Zahlen manchmal fast innerhalb einer Sekunde ändern, bezweifle ich, dass der Browser die gesamte HTML-Datei neu lädt. Manueller Reload dauert bei weitem länger. . .

    FRAGE 2: Gibt es eine elegante Lösung, bspw. mittels Javascript?
    Vielleicht hat jemand von euch ja eine Idee, wie man mein Vorgehen effizienter realisieren kann. . .

    Vielen Dank im Voraus für jede Hilfe! 🙂
    Denis



  • denis2102 schrieb:

    FRAGE 1: Wie aktualisiert der Browser die Darstellung?
    Da sich die die Zahlen manchmal fast innerhalb einer Sekunde ändern, bezweifle ich, dass der Browser die gesamte HTML-Datei neu lädt. Manueller Reload dauert bei weitem länger. . .

    Gegenfrage: Kann er das denn überhaupt? Wenn ich deine Zusicherung...

    denis2102 schrieb:

    Es handelt sich um eine reine HTML-Datei, kein PHP, keine ersichtliche Verbindung zu einer Datenbank, oder ähnliches.

    so verstehe dass hier auch kein Javascript im Spiel ist, dann kann er das nämlich mMn. gar nicht können.

    "Die" Variante wie man sowas meines Wissens nach macht, ist nämlich JavaScript Code in die Seite reinzupacken. Dieser Code kann dann z.B. einen asynchronen "GetChanges" Request an den Server schicken. Und der Server antwortet mit einer Liste an Änderungen. Der JavaScript Code geht diese dann durch und pflegt sie in das sog. DOM (Document Object Model) der Seite ein. Im Prinzip kannst du dir vorstellen dass der JavaScript Code dabei der HTML Code der Seite ändert während sie gerade angezeigt wird. (Läuft zwar im Hintergrund etwas anders, das spielt aber hier erstmal keine Rolle.)

    Wenn sich von Request zu Request wenig ändert, dann muss dabei auch wenig runtergeladen werden, und das ganze geht relativ flott.

    Wenn die Seite mit der du arbeitest das auch so macht... Was du dann machen kannst, ist ebenso "GetChanges" Request an den Server zu schicken und die zurückgelieferten Änderungen in dein Datenmodell einzupflegen.

    Ansonsten würde es helfen wenn du uns verrätst um welche Seite es sich denn handelt. Dann könnte man nachgucken.

    ps: Ich würde dir für so ein Vorhaben eher C# oder Java empfehlen. Oder auch Python. Viel weniger mühsam für Dinge dieser Art.



  • Hallo

    Ein ähnliches Problem hatte ich auch mal. Die Lösung ist eigentlich recht einfach. Ich zieh mir den Code, parse die benötigten Information und schreibe sie in eine Datei. Hier mal der Code um den DAX zu bekommen (die sleep time kannst natürlich abändern):

    #!/bin/bash
    
    if test -e ./DAX_tick.txt
    then
      while :; do
        (echo -n $(w3m -no-cookie http://www.finanzen.net/aktien/DAX-Realtimekurse | grep -A1 'Zeit.*Bid.*Ask' | tail -n 1 | sed -r 's/.{0}(.{18}).*/\1/') "" && date "+%d.%m.%y") >> DAX_tick.txt
        sleep 12
      done
    else
      echo "#Zeit Geldkurs Datum" >> DAX_tick.txt
      while :; do
        (echo -n $(w3m -no-cookie http://www.finanzen.net/aktien/DAX-Realtimekurse | grep -A1 'Zeit.*Bid.*Ask' | tail -n 1 | sed -r 's/.{0}(.{18}).*/\1/') "" && date "+%d.%m.%y") >> DAX_tick.txt
        sleep 12
      done
    fi
    

    Grüße


Log in to reply