Tom: Zelleninhalte mittels PHP extrahieren

Hello,

ich muss mit PHP die Zelleninhalte von HTML-Elementen, ahuptsächlich von Tabellenzellen, extrahieren. Die Seite muss also irgendwie HTML-geparst werden.

Mit den XML-Parser Funktionen von PHP kommt man da ja nicht weiter.

Kennt jemand eine fertige Klasse oder Funktionensammlung zu diesem Thema?

Es würde mich natürlich auch reizen, das mal selbst zu lösen, da fehlt mir aber im Monet die Idee, wie das sinnvoll werden könnte. Es geht ja darum, sich wiederholende Strukturen irgendwie zu erkennen und dann auslesen zu können.

Dabei kann es natürlich passieren, dass z.B. die </td> Tags fehlen oder die Paragraphs als <p /> geschrieben werden oder auch <img ... /> und <input .../> mal benutzt werden und mal nicht...

Wie würdet Ihr da vorghehen?

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
  1. Hallo Tom,

    eine Idee waere, erstmal Tidy ueber die Dateien laufen zu lassen, dann hast Du schonmal ein einheitliches Bild. Dann nimmst Du Dir mit einenn Regexp alles vor, was zwischen <td> und </td> steht, achtest darauf, dass diese wieder zwischen <tr> und </tr> stehen und so fort.

    Dieter

    1. Hello,

      eine Idee waere, erstmal Tidy ueber die Dateien laufen zu lassen, dann hast Du schonmal ein einheitliches Bild. Dann nimmst Du Dir mit einenn Regexp alles vor, was zwischen <td> und </td> steht, achtest darauf, dass diese wieder zwischen <tr> und </tr> stehen und so fort.

      Mit RegExpressions geht das bestimmt. Aber könnte man es denn ohne realisieren?

      Ein Tag wird eröffent durch  <  und beendet durch  > .
      Das gilt aber nicht, wenn das  <  in einem String steht. Das gleiche gilt für  >  Oder?

      Wodurch wird denn die Start- und Ende-Definition noch gestört?

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hallo Tom,

        Ein Tag wird eröffent durch  <  und beendet durch  > .
        Das gilt aber nicht, wenn das  <  in einem String steht. Das gleiche gilt für  >  Oder?

        ich versuche dir zu folgen, aber wenn <td .....> in einem String steht dann ist es immer noch ein Tag, denke ich. Eben =<td[^>]*>=

        Wodurch wird denn die Start- und Ende-Definition noch gestört?

        Beste Grüße
        Viennamade

        1. Hello,

          Ein Tag wird eröffent durch  <  und beendet durch  > .
          Das gilt aber nicht, wenn das  <  in einem String steht. Das gleiche gilt für  >  Oder?

          ich versuche dir zu folgen, aber wenn <td .....> in einem String steht dann ist es immer noch ein Tag, denke ich. Eben =<td[^>]*>=

          Das ist eben die Frage: Müssen die HTML-eigenen Zeichen immer und an jeder Stelle ersetzt werden durch HTML-Entities? Da habe ich hier auch schon andere Aussagen gelesen, finde sie aber nicht wieder. Leider wüsste ich auch nicht, wonach ich da jetzt im Archiv suchen sollte.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Hi,

            Ein Tag wird eröffent durch  <  und beendet durch  > .
            Das gilt aber nicht, wenn das  <  in einem String steht. Das gleiche gilt für  >  Oder?

            ich versuche dir zu folgen, aber wenn <td .....> in einem String steht dann ist es immer noch ein Tag, denke ich. Eben =<td[^>]*>=

            Das ist eben die Frage: Müssen die HTML-eigenen Zeichen immer und an jeder Stelle ersetzt werden durch HTML-Entities? Da habe ich hier auch schon andere Aussagen gelesen, finde sie aber nicht wieder. Leider wüsste ich auch nicht, wonach ich da jetzt im Archiv suchen sollte.

            http://validator.w3.org/check?uri=http%3A%2F%2Ftemp.andreas-waechter.de%2Fvalid.html&charset=(detect+automatically)&doctype=(detect+automatically)&ss=1&sp=1&verbose=1

            cu,
            Andreas

            --
            MudGuard? Siehe http://www.Mud-Guard.de/
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Hello,

              Die ganz einfache Idee sah bisher so aus:

              <?php   ### find_tags.php ###

              $daten = file_get_contents('test.html');
              $_split = explode("<",$daten);
              $_tags = array();

              foreach($_split as $str)
              {
                $pos = strpos($str,'>');

              if ($pos !== false)
                {
                  $_tags[] = array(substr($str,0,$pos),substr($str,$pos+1));
                }
              }

              echo "<pre>\n";
              echo htmlentities(print_r($_tags,true));
              echo "</pre>\n";

              ?>

              Aber die nützt ja nix, wenn JavaScript usw. enthalten ist.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
      2. Hi,

        Ein Tag wird eröffent durch  <  und beendet durch  > .
        Das gilt aber nicht, wenn das  <  in einem String steht. Das gleiche gilt für  >  Oder?
        Wodurch wird denn die Start- und Ende-Definition noch gestört?

        SHORTTAG = YES in HTML (aber nicht in XHTML).
        Das hat noch so diverse Schmankerln, die ich aber auch nicht ganz durchschaue - aber wenn ich mich richtig erinnere, ist folgendes ein komplettes title-Element samt Inhalt:

        <title/INHALT/

        Derartige Konstrukte - genaue Syntax weiß ich nicht merh - sind in HTML zwar erlaubt, aber die Browser kommen damit nicht zurecht, so daß sie auch nicht weit verbreitet sind - wenn man mal von XHTML-img/meta/... in HTML-Dateien absieht.

        <meta /> führt in HTML  (ohne X)z.B. zu einem Validierungsfehler, weil das > nicht mehr zum Tag gehört und freier Text ist, der aber im head-Element nicht erlaubt ist. <img /> in HTML (ohne X) führt dagegen NICHT zum Validierungsfehler - was daran liegt, daß an den Stellen, an denen das img erlaubt ist, auch freier Text (PCDATA) erlaubt ist und somit das > nicht stört.

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.Mud-Guard.de/
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. Hello,

          Ein anderes Problem sind dann die  < und  > ja noch, wenn sie im PHP-Code oder im JavaScript-Teil als mathematische Zeichen auftauchen. Auch wenn ich also nur den Code für den Browser analysieren will, sind die JavaScript-Teile immer noch ein Problem.

          Wie also machen?

          Da muss man ja schon den halben Parser des Browsers nachbauen.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau