Wie eine HTML mit Php parsen und auswerten?

09/11/2012 16:29 Ghostrider582#1
Ich habe bisher Stundenlang gesucht, doch nichts verwertbares gefunden.
Meine Hilfsmittel sind simple_html_dom und mein Code ist:

HTML Code:
<div id="ts3_viewer">
            <div class="server_green">
                <a href="ts3server://xxx.xxx.xxx.xxx/?port=xxxx" title="TeamSpeak3 Server">
                    TSServer
                </a>
            </div>
            <div class="item">
                <div class="label channel_green">
                    Eingangshalle
                </div>
                <div class="flags">
                </div>
                <div class="item">
                    <div class="label channel_green">
                        Unterhaltung
                    </div>
                    <div class="flags">
                    </div>
                </div>
            </div>
            <div class="item">
                <div class="label channel_green">
                    World of Warcraft
                </div>
                <div class="flags">
                </div>
                <div class="item">
                    <div class="label channel_green">
                        10er Raid
                    </div>
                    <div class="flags">
                    </div>
                </div>
                <div class="item">
                    <div class="label channel_green">
                        Instanzen1
                    </div>
                    <div class="flags">
                    </div>
                </div>
                <div class="item">
                    <div class="label channel_green">
                        Instanzen2
                    </div>
                    <div class="flags">
                    </div>
                </div>
            </div>
            <div class="item">
                <div class="label channel_yellow">
                    Offizier
                </div>
                <div class="flags">
                </div>
            </div>
            <div class="item">
                <div class="label channel_green">
                    AFK
                </div>
                <div class="flags">
                </div>
                <div class="item">
                    <div class="label mic_disabled">
                        Ghostrider
                    </div>
                    <div class="flags">
                    </div>
                </div>
            </div>
        </div>

Wie man bereits sieht, ist der Code sehr dynamisch. Leider deswegen funktioniert mein Parser nicht.

Aufgebaut hatte ich ihn mit einer Rekursion,
der Abfrage, ob das Aktuelle Element noch weitere div's enthält, wenn ja, wieder Rekursion. Wenn nein, dann soll ers in eine Datenbank scheiben. (Das mit Datenbanken kapier ich alles)

Wenn mir da jemand helfen könnte wäre ich sehr dankbar.

MFG
09/12/2012 09:22 NotEnoughForYou#2
Das gehört eigentlich in den WebDev Bereich ... da html nichts anderes ist als xml kannst du auch mit [Only registered and activated users can see links. Click Here To Register...] arbeiten.

Wie nutzt du denn den simple_html_dom Parser ? Was genau funktioniert nicht ?
09/12/2012 14:33 Ghostrider582#3
Vielen Dank, doch wenn du weißt wie man damit umgehen kann würde ich mich freuen wenn du mir für mein Beispiel eine Anwendung zeigen könntest.
Denn ich blick nicht so ganz duch die API durch...
Trotzalldem die BESTE Lösung für mich, ich setz mich mal damit auseinander. Danke

Quote:
Originally Posted by NotEnoughForYou View Post
Wie nutzt du denn den simple_html_dom Parser ? Was genau funktioniert nicht ?
ich habe bisher so damit gearbeitet:

PHP Code:
<?php
$html 
file_get_html("./content.php");
    
parse($html);
    
    function 
parse($html) {
        if (
strpos("div"$html) === false) {
            
//<-- Eintrag in MySQL Database -->
            
echo $html->plaintext."***<br />";
        } else {
            foreach (
$html->find('div') as $e) {
                
parse($e);
            }
        }
    }
?>
Hier mal ein Code der mir dabei ausgeworfen wird:

Quote:
TSserver ***
Eingangshalle ***
***
Unterhaltung ***
***
Unterhaltung ***
***
Eingangshalle ***
***
Unterhaltung ***
***
Unterhaltung ***
***
World of Warcraft ***
***
10er Raid ***
***
10er Raid ***
***
Instanzen1 ***
***
Instanzen1 ***
***
Instanzen2 ***
***
Instanzen2 ***
***
World of Warcraft ***
***
10er Raid ***
***
10er Raid ***
***
Instanzen1 ***
***
Instanzen1 ***
***
Instanzen2 ***
***
Instanzen2 ***
***
Offizier ***
***
Offizier ***
***
AFK ***
***
Ghostrider ***
***
Ghostrider ***
***
AFK ***
***
Ghostrider ***
***
Ghostrider ***
***
TSserver ***
Eingangshalle ***
***
Unterhaltung ***
***
Unterhaltung ***
***
Eingangshalle ***
***
Unterhaltung ***
***
Unterhaltung ***
***
World of Warcraft ***
***
10er Raid ***
***
10er Raid ***
***
Instanzen1 ***
***
Instanzen1 ***
***
Instanzen2 ***
***
Instanzen2 ***
***
World of Warcraft ***
***
10er Raid ***
***
10er Raid ***
***
Instanzen1 ***
***
Instanzen1 ***
***
Instanzen2 ***
***
Instanzen2 ***
***
Offizier ***
***
Offizier ***
***
AFK ***
***
Ghostrider ***
***
Ghostrider ***
***
AFK ***
***
Ghostrider ***
***
Ghostrider ***
***
--> Problem bei der sache ist nur, dass mir alles doppelt und dreifach ausgegeben wird. Ich würde aber gerne den Inhalt analysieren und weiterverwerten.

MFG
09/12/2012 14:55 D3adlySil3nc3#4
Ich weiß jetzt zwar nicht was du dann weiter machen möchtest, aber wenn du wirklich nur das auslesen möchtest.
Dann würde sich doch ein kleiner aber feiner regex auszahlen.
09/12/2012 15:27 NotEnoughForYou#5
Ich muss kucken wenn ich zuhause bin ob ich die Zeit finde es zu machen.
09/15/2012 17:47 Fredyy#6
PHP Code:
<?php
$url 
"http://www.exmaple.com";

$sourcestring file_get_contents($url);

preg_match_all('@<div class="label ([\w]*)">([^<]*)</div>@ms',$sourcestring,$matches);

$channels =  array_map('trim'$matches['2']); 

foreach(
$channels as $channel){
    echo 
"{$channel} <br/>";
}
?>
So würde ich es lösen.