SimpleHTML Dom Parser Tabellenspalten Variablen zuweisen

  • PHP

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von GCAsk.

    SimpleHTML Dom Parser Tabellenspalten Variablen zuweisen

    Guten Morgen,

    ich möchte eine Tabelle aus einer Webseite auslesen. Hierfür benutze ich den SimpleHTML DOM Parser.

    Das Ganze funktioniert soweit auch.

    Zunächst der Aufbau der Tabelle:

    HTML-Quellcode

    1. <tr class="test">
    2. <td>2016-01-04</td>
    3. <td>Hans</td>
    4. <td>1</td>
    5. </tr>
    6. <tr class="test">
    7. <td>2016-01-05</td>
    8. <td>Peter</td>
    9. <td>2</td>
    10. </tr>


    Hier dann mein Code:

    PHP-Quellcode

    1. include('simple_html_dom.php');
    2. // DOM Erstellung
    3. $html = file_get_html('index.html');
    4. // Auflistung aller Datensätze
    5. $counter = 0;
    6. foreach($html->find('tr.test') as $element){
    7. $counter++;
    8. echo $element . '<br>';
    9. }
    10. echo $counter . " Datens&aumltze gefunden." ;


    Das Ganze funktioniert, jeder "Datensatz" wird mir ausgegeben.
    Nun will ich aber die einzelnen Spalten der Datensätze in eine Variable packen, sodass ich die einzelnen Spalten abspeichern kann.

    Wie stell ich mir das vor?
    Nun ja, ein "Datensatz" ist jeweils <tr>.
    Die dazugehörigen Spalten sind <td> im <tr> Bereich des entsprechenden Datensatzes.

    Die erste Spalte beinhaltet bspw. das Datum, die zweite den Namen, die Dritte eine Zahl.
    Möchte am Ende also jede Spalte einer Variable zuordnen ($date, $name, ..).

    Wie kann ich das lösen?
    Habe irgendwas gelesen, dass man einfach find('tr',0) machen kann für den ersten, ('tr',1) für den zweiten, ... , aber das will so nicht funktionieren.

    Danke im Voraus!
    Nutz die Online Dokumentation: simplehtmldom.sourceforge.net/manual.htm

    PHP-Quellcode

    1. $table = [];
    2. foreach($html->find('tr.test') as $element){
    3. $datum = $element->children(0)->outertext ;
    4. $name = $element->children(1)->outertext ;
    5. $id = $element->children(2)->outertext ;
    6. array_push($table,[
    7. 'datum' => $datum,
    8. 'name' => $name,
    9. 'id' => $id,
    10. ]);
    11. }
    12. print_r($table);

    Ausgabe:

    PHP-Quellcode

    1. Array (
    2. [0] => Array (
    3. [datum] => 2016-01-04
    4. [name] => Hans
    5. [id] => 1
    6. )
    7. [1] => Array (
    8. [datum] => 2016-01-05
    9. [name] => Peter
    10. [id] => 2
    11. )
    12. )

    PHP-Quellcode

    1. $erstesDatum = $table[0]['datum']; // bzw. $erstesDatum = $html->find('tr.test', 0)->children(0)->outertext;
    2. $ersterName = $table[0]['name']; // bzw. $ersterName = $html->find('tr.test', 0)->children(1)->outertext;
    3. $ersteId = $table[0]['id']; // bzw. $ersteId = $html->find('tr.test', 0)->children(2)->outertext;
    4. $zweitesDatum = $table[1]['datum']; // bzw. $zweitesDatum = $html->find('tr.test', 1)->children(0)->outertext;
    5. $zweiterName = $table[1]['name']; // bzw. $zweiterName = $html->find('tr.test', 1)->children(1)->outertext;
    6. $zweiteId = $table[1]['id']; // bzw. $zweiteId = $html->find('tr.test', 1)->children(2)->outertext;
    7. ....


    Konnte nicht ganz herauslesen, was Du genau haben willst, aber evtl. hilft es Dir für das eigene Verständnis weiter.
    Vielen Dank @Anluin, genau das brauche ich, habe das ganze für mich angepasst - und es geht! Ich bin dir so dankbar, vielen Dank! :)

    Allerdings stehe ich jetzt vor einem weitaus größerem Problem, ich hoffe, dass mir damit geholfen werden kann.

    Das Skript funktioniert nur, wenn ich den Quellcode aus einer lokalen Datei abrufe, rufe ich das ganze allerdings via URL ab, ist das Array leer.

    Nach langem Debuggen habe ich herausgefunden, dass er falsch umleitet.

    Um den Zugang zu den Daten zu erhalten, muss ich einen "Token" an die URL mitgeben. webseite.de?token=12345.
    Diese Webseite leitet allerdings, wenn man sie im Browser aufruft, auf webseite.de/index.php um. War der Token richtig, werden einem hier die Daten angezeigt, andernfalls erscheint nur eine Fehlermeldung.

    Ja und genau das kann das Skript nicht. Er leitet auf index.php um, nimmt den Token aber nicht mit, obwohl ich bei file_get_html die zuerst genannte URL dranhänge.

    Wie kann ich das lösen?

    /EDIT:
    Habe mit Curl zumindest den Token mitübersenden können, auch steht jetzt im Quelltext, dass ich erfolgreich eingeloggt bin - dennoch bin ich auf der Startseite ohne Datensätze. Muss wohl noch zusätzlich die Cookies mitsenden - wie mache ich das? Und wie finde ich heraus, welchen Cookie ich überhaupt senden muss? @Anluin

    Über Hilfe wäre ich unendlich dankbar!

    /EDIT2:
    Niemand eine Idee? @Anluin ^^

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „GCAsk“ ()