PHP Simple HTML DOM

julia123

Erfahrenes Mitglied
hi, bin grade dabei PHP und damit auch Simple HTML DOM zu lernen.

Ich habe eine kleine Frage zu Traversierung.

HTML Beispiel:
Code:
<div class="test_A">

              <div class="test_unotig"> ...  </div>    
              <div class="test_B">
                            ...
                  <p> AusgabeX</p>
                  <p> nicht Ausgeben</p>
                        ...
              </div> 
              <div class="test_B"> 
                              ... 
                <p> AusgabeY</p>
              </div> 
              <div class="test_B"> 
                              ... 
                <p> AusgabeZ</p>
              </div> 
</div>
Was ich möchte ist hier alle <p> auszugeben. Aber auch nur genau die die an der ersten Stelle der classe test_B jeweilst vorhanden ist.

Was ich gemacht habe:
Code:
 foreach($doc->find('div[class=test_B') as $tmp){ 
           
            echo $tmp->find('p',0);
           
           
       
        }
Bei diesem Quellcodestück gibt er mir nur "AusgabeX" aus. Kann mir jemand helfen?

2. Frage wie kann ich auf ein tags zugreifen die so aussehen:
Code:
<div class="test_A col_type1 padding_type1">

A:$doc->find('div[class=test_A')
B:$doc->find('div[class=test_A col_type1 padding_type1')

Ich hab beides in einer Komplexer Ausführung versucht, beides hat nicht funktioniert. Vielleicht liegt der Fehler wo anders. Jedoch würde ich gerne eine Bestätigung vielleicht von jemanden der es besser weis hören.
3. Frage wie kann ich auf ein link zugreifen in einer Tag z.B: [code]<a class="link" href="www.ichmöchtegeöffnetwerden.de"></a>[/code]

Ich dachte an sowas

Code:
$tmp = $doc->find('a');
$link = tmp->href;
echo $link;// hier bekomme ich nix raus?
 
Zuletzt bearbeitet:
Hi, du hast uns nichtmals mitgeteilt, welches Skript du dort in welcher Version verwendest. Bitte verlinke es doch.
Desweiteren bietet PHP von Haus aus einige Funktionen (sogar objektorientiert) um mit dem DOM zu arbeiten, und zwar DOMDocument und SimpleXML. Meine Vermutung ist, dass $ps = $tmp->find('p'); dir alle p-Tags zurückgibt. Natürlich darfst du nicht vergessen, dass diese Variable in deiner Schleife immer überschrieben werden würde.

Zu der zweiten frage: Vernünftige DOM Parser kommen mit vernünftigem (=validem HTML/XML) klar. Mehrere Klassennamen sind erlaubt und sollten dementsprechend kein Problem darstellen. Mehere IDs dagegen NICHT!

Zur letzten Frage: Hier vermute ich, dass $tmp in deinem Fall ein Array ist. Kennst du eigentlich var_dump? Einfach mal auf alle möglich Variablen anwenden, dann siehst du auch mal, was da passiert ;)
 
Hi Danke für eine Antwort,

du hast uns nichtmals mitgeteilt, welches Skript du dort in welcher Version verwendest.
Also ich bin php Neuling, wo findet man die Skript Version.

Bitte verlinke es doch.
Desweiteren bietet PHP von Haus aus einige Funktionen (sogar objektorientiert) um mit dem DOM zu arbeiten, und zwar DOMDocument und SimpleXML. Meine Vermutung ist, dass $ps = $tmp->find('p'); dir alle p-Tags zurückgibt
Ich versteh nicht auf was du hinaus willst. Das
$ps = $tmp->find('p');
alle p-Tags findet und in einem array speichert ist mir klar. Bei mir ist das Problem, ich möchte immer nur das ERSTE p der jeweiligen Klasse z.b. div in einem array speichern. Siehe oben das beispiel noch mal genauer an * Frage 1 HTML Beispiel.


Zu der zweiten frage: Vernünftige DOM Parser kommen mit vernünftigem (=validem HTML/XML) klar. Mehrere Klassennamen sind erlaubt und sollten dementsprechend kein Problem darstellen. Mehere IDs dagegen NICHT!
Also ist Anwort B:$doc->find('div[class=test_A col_type1 padding_type1') korrekt ? Hier reicht mir ein ja oder nein.

[QUOTE]Kennst du eigentlich var_dump?[/QUOTE] Ja ich kenne var_dump jedoch wenn ich das ausführe wird nichts angezeigt.

Als beispie von oben entnommen:
Bei echo $tmp->find('p',0); bekomme ich eine Ausgabe. Bei var_dump($tmp); leider nichts.
 
ich muss mich verbessern hab var_dump nochmals ausgeführt. Jedoch ensteht eine .txt Datei die extrem groß ist was ich nicht verstehe. Ich muss den Vorgang abrechen weil die Datei mehrere GB groß wird. Ich vermute daher kein Inhalt sehen zu können. ok soweit bin ich. Aber egal was ich mit var_dump ausgeben möchte wird die Datei extrem groß. Kann mir vielleicht jemand weiter helfen. Und ich bin eigentlich nicht wirklich weiter gekommen mit den Tips. Hab alles ausprobiert. Vielleicht auch mal eine richtige Lösendeantwort wie ihr es machen würdet.
 
Irgendwas läuft bei dir dann gehörig schief. var_dump() erstellt nämlich keinesfalls Dateien, erst recht nicht im Gigabyte-Bereich. Es macht eine Bildschirmausgabe mit dem ihr übergebenen Variableninhalt. var_dump() kann dabei mit fast jedem Datentyp umgehen, was es zum Debuggen unglaublich nützlich macht.

B) Man kann nicht ja oder nein sagen, wenn man das verwendete Skript nicht kennt. Wenn es nicht funktioniert, tippe ich auf nein.

Wenn du hier mal ein wenig von deinem HTML Code posten würdest und beschreibst, was genau du daraus extrahieren willst, könnte man dir mal Beispielhäppchen-Code vorwerfen. Mit den jetzigen Angaben ist das völlig unmöglich - ich könnte nur raten wie das DOM aufgebaut ist und die Funktionen implementiert sind. (Nochmal zur Wiederholung: Du hast weder das von dir verwendete PHP Projekt NOCH die Quell-HTML-Datei angegeben! Du weißt zwar sicherlich genau was du willst und was nicht funktioniert, der Trick in so einem Forum ist, selbiges auch völlig Ahnungslosen Forenlesern wie mir vertraut zu machen ;) )
 
Also bei mir ist das so das ich die Fehlermeldung umleite. Die Fehlermeldungen werden in einer .html gespeichert. Wenn ich nun var_dump anwende, meine ich dass diese .html teilweise mehrere GB groß wird. Wen ich z.b.: stattdessen var-paintext ; anwende wird mir der var Inhalt einer Variable angezeigt. (Nur als Kontrolle dass das Programm ordnungsgemäß läuft).

Wenn du hier mal ein wenig von deinem HTML Code posten würdest und beschreibst, was genau du daraus extrahieren willst, könnte man dir mal Beispielhäppchen-Code vorwerfen.

Ok gerne, ich versteh zwar nicht wieso sich die Logik bei DOM von HTML zu HTML ändern sollte aber ich lass mich gern einem besseren belehren.

https://www.axantis.com/jobsuche.html

Hier wäre ein link auf dieser Seite würde ich gerne alle Links die zu einem Job sind speichern. Oder z.B.: die Beschreibung die drunter steht speichern/ausgeben...
Es geht mir halt ums exakte iterieren, die Webseite speilt eigentlich keine Role dachte ich aber vielleicht kannst du mich belehren. Und ich wüsste nicht das ich Sessions zwischen speichern müsste...
 

Neue Beiträge

Zurück