Ankündigung

Einklappen
Keine Ankündigung bisher.

REGEX Experte gesucht für Webseite parsen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    REGEX Experte gesucht für Webseite parsen

    Hallo,

    ist jemand so nett und kann mir einen Tipp geben, wie ich mittels Regex für einen Baustein am geschicktesten die Werte aus der HTML Seite parsen kann.

    Code:
    </table></div><div class="span-11 prepend-1" style="float:right"><table class="info"><tr><th colspan="2" class="round-top">[COLOR=#FF0000]HEIZEN[/COLOR]</th></tr>  <tr class="even">
        <td class="key">AUSSENTEMPERATUR</td>
        <td class="value">22,6 °C</td>
      </tr>
      <tr class="odd">
        <td class="key">ISTWERT HK1</td>
        <td class="value">25,2 °C</td>
      </tr>
      <tr class="even">
        <td class="key">SOLLWERT HK1</td>
        <td class="value">28,0 °C</td>
      </tr>
      <tr class="odd">
        <td class="key">ISTWERT HK2</td>
        <td class="value">25,5 °C</td>
      </tr>
      <tr class="even">
        <td class="key">SOLLWERT HK2</td>
        <td class="value">30,1 °C</td>
      </tr>
      <tr class="odd">
        <td class="key">VORLAUFTEMPERATUR</td>
        <td class="value">24,8 °C</td>
      </tr>
      <tr class="even">
        <td class="key">RÜCKLAUFTEMPERATUR</td>
        <td class="value">25,4 °C</td>
      </tr>
      <tr class="odd">
        <td class="key">DRUCK HEIZKREIS</td>
        <td class="value">1,3 bar</td>
      </tr>
      <tr class="even">
        <td class="key round-leftbottom">VOLUMENSTROM</td>
        <td class="[COLOR=#0000FF]value round-rightbottom[/COLOR]">0,0 l/min</td>
      </tr>
    </table>
    Ich würde gerne mit dem Regex die Sektion, hier HEIZEN abfragen und dann die einzelnen Key / Value Paare.
    Blau markiert eine Ausnahme - leider kann man nicht davon ausgehen, dass immer nur "value" steht.

    Wäre über ein Funktionierendes REGEX, dass auch mit "preg_match" im PHP klappt, dankbar!

    Gruß Erich

    #2
    Hi,

    von welchem Hersteller ist die Website???

    Schau dir mal Baustein 19000160 & 19000161 von mir im Downloadportal an. Dort frage ich Stiebel ISG ab. Ist vom Aufbau ähnlich.

    Gruß

    Kommentar


      #3
      ich weiß, dass du die Werte abfragst - es handelt sich eh um die Wärmepumpe!
      Aber da du den Baustein nicht angepasst hast, bin ich gerade dran.

      Leider funktioniert dein Regex nicht mit allen Parametern - es gibt eben Ausnahmen.

      Deshalb bin ich auf der Suche nach einem Regex, dass in allen Fällen funktioniert - und auch deshalb wollte ich nicht zur Verwirrung deinen Command hier posten

      Gruß Erich

      P.S. ich habe endlich das Edomi am laufen *uff* und sehe Werte.
      Jetzt muß ich mich "nur" noch mit der Datenbank beschäftigen, um diese aufzeichnen zu können,...

      Kommentar


        #4
        Regexp ist nicht gut um HTML/XML zu parsen, aber weil das ja Software ist, geht das trotzdem irgendwie
        PHP-Code:
        $s='Der HTML Kram von oben';
        preg_match_all('#key.*?">(.*?)</.*?value.*?">(.*?)</#si',$s,$matches);
        print_r($matches); 
        Eleganter waere es allerdings, das durch nen XML-Parser zu ziehen...

        HTH :: Michael

        Kommentar


          #5
          Michael bei mir klappt dein Regex nicht - ich habe es so belassen, also nicht das Wort "key" ersetzt - nehme an, dass du dann alle Key-Value Paare finden wolltest?

          Aber du hast recht mit einem XML Parser klappt das gut.
          Denke auch, dass Regex da an seine Grenzen stößt,...

          Gruß Erich

          Kommentar


            #6
            Als Workaround könntest Du Dich ggf. einfach an den Einheiten (Grad, etc.) orientieren und die Tags quasi vernachlässigen. Ist natürlich "Gehuddels", aber relativ einfach.
            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

            Kommentar


              #7
              Zitat von eriche Beitrag anzeigen
              Michael bei mir klappt dein Regex nicht - ich habe es so belassen, also nicht das Wort "key" ersetzt - nehme an, dass du dann alle Key-Value Paare finden wolltest?
              Guck... und ich hatte das so verstanden, dass DU die Key-Value Paare haben wolltest
              Ersetzen muss man da auch nix, wenn ich Deinen HTML Code auf meine RegExp los lasse, bekomme ich folgendes raus:
              PHP-Code:
              Array
              (
                  [
              0] => Array
                      (
                          [
              0] => key">AUSSENTEMPERATUR</td>
                  <td class="
              value">22,6 °C</
                          [1] => key"
              >ISTWERT HK1</td>
                  <
              td class="value">25,2 °C</
                          [
              2] => key">SOLLWERT HK1</td>
                  <td class="
              value">28,0 °C</
                          [3] => key"
              >ISTWERT HK2</td>
                  <
              td class="value">25,5 °C</
                          [
              4] => key">SOLLWERT HK2</td>
                  <td class="
              value">30,1 °C</
                          [5] => key"
              >VORLAUFTEMPERATUR</td>
                  <
              td class="value">24,8 °C</
                          [
              6] => key">RÜCKLAUFTEMPERATUR</td>
                  <td class="
              value">25,4 °C</
                          [7] => key"
              >DRUCK HEIZKREIS</td>
                  <
              td class="value">1,3 bar</
                          [
              8] => key round-leftbottom">VOLUMENSTROM</td>
                  <td class="
              value round-rightbottom">0,0 l/min</
                      )

                  [1] => Array
                      (
                          [0] => AUSSENTEMPERATUR
                          [1] => ISTWERT HK1
                          [2] => SOLLWERT HK1
                          [3] => ISTWERT HK2
                          [4] => SOLLWERT HK2
                          [5] => VORLAUFTEMPERATUR
                          [6] => RÜCKLAUFTEMPERATUR
                          [7] => DRUCK HEIZKREIS
                          [8] => VOLUMENSTROM
                      )

                  [2] => Array
                      (
                          [0] => 22,6 °C
                          [1] => 25,2 °C
                          [2] => 28,0 °C
                          [3] => 25,5 °C
                          [4] => 30,1 °C
                          [5] => 24,8 °C
                          [6] => 25,4 °C
                          [7] => 1,3 bar
                          [8] => 0,0 l/min
                      )


              Im Index 1 die Keys, im Index 2 die Values... oder ich hab die Aufgabenstellung nicht verstanden

              Zitat von eriche Beitrag anzeigen
              Aber du hast recht mit einem XML Parser klappt das gut.
              Denke auch, dass Regex da an seine Grenzen stößt,...
              Jane, das geht mit RegExp schon, aber wenn man XML parsen kann ist es irgendwie intuitiver....

              Oder wolltest Du eigentlich die Sektion (also hier HEIZEN) haben? Das geht zB so:
              PHP-Code:
              #(HEIZEN.*?)</table#si 
              gruesse :: Michael

              Kommentar


                #8
                Jetzt schnall' ich's auch schon - ich dachte "key" und "value" wären irgendwelche Platzhalter, dabei sind es CSS-Klassen im Quelltext wintermute ist eben genial!
                EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                Kommentar


                  #9
                  Zitat von gaert Beitrag anzeigen
                  wintermute ist eben genial!
                  Ich fasse das mal als Kompliment auf

                  Kommentar


                    #10
                    So war es auch gemeint!
                    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                    Kommentar


                      #11
                      Ich bekomme nun folgendes beim Parsen der kompletten Webseite bekommen ([0] Array weggelassen)


                      HTML-Code:
                      [1] => Array         (
                      [0] =>    <!-- does not exist link rel="stylesheet" href="./css/netzwerk.css" type="text/css" media="all" /-->   <link rel="stylesheet" type="text/css" href="./css/slider/ste_slider.css" /> <!-- Blueprint CSS framework --> <link rel="stylesheet" href="./css/blueprint/screen.css" type="text/css" media="screen, projection" /> <link rel="stylesheet" href="./css/blueprint/print.css" type="text/css" media="print" /> <!--[if lt IE 8]><link rel="stylesheet" href="./css/blueprint/ie.css" type="text/css" media="screen, projection" /><![endif]--> <link rel="stylesheet" href="./css/layout.css" type="text/css" media="all" />   <link rel="stylesheet" href="./css/sifr.css" type="text/css" media="all" /> <link rel="stylesheet" href="./css/thickbox.css" type="text/css" media="all" /> <link rel="stylesheet" type="text/css" href="./css/jquery.jqplot.min.css" />     <script type="text/javascript" src="./js/jquery.min.js">
                      [1] => RAUMISTTEMP. HK1
                      [2] => RAUMSOLLTEMP. HK1
                      [3] => RAUMFEUCHTE HK1
                      [4] => RAUMISTTEMP. HK2
                      [5] => RAUMSOLLTEMP. HK2
                      [6] => RAUMFEUCHTE HK2
                      [7] => AUSSENTEMPERATUR
                      [8] => ISTWERT HK1
                      usw..)
                      [2] => Array         (
                      [0] => <div id="content">     <div class="span-11 append-1" style="float:left"><table class="info"><tr><th colspan="2" class="round-top">RAUMTEMPERATUR
                      [1] => 24,2 °C
                      [2] => 24,5 °C
                      [3] => 45,4 %
                      [4] => 25,0 °C
                      [5] => 25,0 °C
                      [6] => 0,0 %
                      [7] => 24,8 °C
                      [8] => 25,5 °C
                      usw..)  )
                      Also wenn man weiß wo genau im Array die relevanten Daten liegen und das so bleibt - dann ist das ein genialer Streich

                      Oder hast du eine Idee, man den "trash" wegbekommt?

                      Danke Erich
                      Zuletzt geändert von eriche; 10.07.2016, 08:01.

                      Kommentar


                        #12
                        Zitat von eriche Beitrag anzeigen
                        Oder hast du eine Idee, man den "trash" wegbekommt?
                        Naja, ohne die Original-Ausgabe zu kennen ist das Glaskugelgucken...
                        Aber ich schaetze mal, eine Aenderung des Codes in:
                        PHP-Code:
                        preg_match_all('#body>.*?key.*?">(.*?)</.*?value.*?">(.*?)</#si',$s,$matches); 
                        koennte helfen.
                        Oder eben wie oben beschrieben vorher erstmal eine bestimmte "Sektion" aus der Webseite rausschneiden und nur die betrachten...

                        Kommentar

                        Lädt...
                        X