[PHP] Webseite parsen mit DOM

Dieses Thema im Forum "Webentwicklung" wurde erstellt von die_kackwurst, 2. Dezember 2010 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 2. Dezember 2010
    Webseite parsen mit DOM

    Hallo!

    Ich versuche gerade eine Webseite zu parsen. Hier mal der Quelltext:

    PHP:
    <? php
        
    include( '\sources\simple_html_dom.php' );

        
    getTrack ( 'http://www.br-online.de/bayern3/index.xml' );

    function 
    getTrack ( $page ) {
        
        
    $html  = new  simple_html_dom ();
        
    $html -> load_file ( $page );
        
        
    $tracks  $html -> find ( 'li[class=noLink]' );  

        echo 
    $track -> innertext ;
    }

    ?>
    Es geht sozusagen darum, dass ich von der Bayern 3 Homepage das aktuelle Lied herauslese.. Was mache ich falsch?!
     
  2. 2. Dezember 2010
    AW: Webseite parsen mit DOM

    PHP:
    $tracks  $html -> find ( 'li[class=noLink]' 0 );  // Nur das erste gefundene Element ;)
    PHP Simple HTML DOM Parser
     
  3. 2. Dezember 2010
    AW: Webseite parsen mit DOM

    Warum so kompliziert und nicht einfach mit einem regulären Ausdruck?

    PHP:
    <? php

    function  getTrack ( $url ) {
        
    $handle  fopen ( $url 'r' );
        
    $content  stream_get_contents ( $handle );
        
    fclose ( $handle );
        
        
    preg_match ( '/Aktueller Musiktitel: "([a-z0-9 .:!?_()\/\-]+)" - ([a-z0-9 .:!?_()\/\-]+)?/i' $content $matches );
        
        if (
    $matches ) {
            if (
    $matches [ 2 ])
                return 
    $matches [ 2 ]. ' - ' . $matches [ 1 ];
            else
                return 
    $matches [ 1 ];
        } else {
            return 
    NULL ;
        }
    }
    echo 
    getTrack ( 'http://www.br-online.de/bayern3/index.xml' );

    ?>
    greez
     
  4. 2. Dezember 2010
    AW: Webseite parsen mit DOM

    Okay beides klappt super.. Danke.
    Aber jetzt bin ich an einer anderen Seite wo ich das selbe versuche - da ist es schwieriger -.-

    PHP:
    <? php
        
    include( '\..\sources\simple_html_dom.php' );
        
        
    getTrack ( 'http://on3.de/' );

    function 
    getTrack ( $page ) {
        
            
    $html  = new  simple_html_dom ();
            
    $html -> load_file ( $page );
            
            foreach(
    $html -> find ( 'span' ) as  $element )
                echo 
    $element -> innertext  '<br>'
        }
    ?>
    So bekomm ich zwar alle Span-Elemente ausgegeben, aber nicht dass wo class=itemHeader bzw. class=itemTitle. Hab es schon versucht mit find('span[class=itemTitle]') aber das klappt nicht
     
  5. 2. Dezember 2010
    AW: Webseite parsen mit DOM

    Hol dir die daten hier her: http://on3.de/tracklist/get_tracklist_data

    json_decode sollte helfen
     
  6. 2. Dezember 2010
    AW: Webseite parsen mit DOM

    PHP:
    <? php

    function  getTrackBR3 () {
        
    $url  'http://www.br-online.de/bayern3/index.xml' ;
        
    $handle  fopen ( $url 'r' );
        
    $content  stream_get_contents ( $handle );
        
    fclose ( $handle );
        
        
    preg_match ( '/Aktueller Musiktitel: "([a-z0-9\s.:!?_()\/\-]+)" - ([a-z0-9\s.:!?_()\/\-]+)?/i' $content $matches );
        
        if (
    $matches ) {
            if (
    $matches [ 2 ])
                return 
    $matches [ 2 ]. ' - ' . $matches [ 1 ];
            else
                return 
    $matches [ 1 ];
        } else {
            return 
    NULL ;
        }
    }

    function 
    getTrackON3 () {
        
    $url  'http://on3.de/' ;
        
    $handle  fopen ( $url 'r' );
        
    $content  stream_get_contents ( $handle );
        
    fclose ( $handle );
        
        
    preg_match ( '/\s*<span class="boxLine1">([a-z0-9\s.:\\/?!-]+)<span class="skip"> &ndash; <\/span><\/span>\s*\r?\n\s*<span class="boxLine2">([a-z0-9\s.:\\/?!-]+)<\/span>\s*/i' $content $matches );
        
            return 
    $matches [ 1 ]. ' - ' . $matches [ 2 ];
        if (
    $matches ) {
        } else {
            return 
    NULL ;
        }
    }

    echo 
    getTrackBR3 ();
    echo 
    '<br />' ;
    echo 
    getTrackON3 ();

    ?>
    *g*

    greez
     
  7. 2. Dezember 2010
    AW: Webseite parsen mit DOM

    Öhm wie bist du denn auf den Link gekommen? Geht das auch für andere Seiten? Wie soll das mit json_decode funktionieren?! Kannst du das mal bitte genauer erklären Danke..

    Könntest du mir mal bitte deine Herangehensweise erklären? Bin noch PHP-Anfänger und kenn mich damit nicht so aus.. Also du liest quasi die HTML-Datei ein.. Dann durchsuchst du sie nach der Struktur und lässt dir das ausgeben. Aber wie kommst du auf beispielsweise das hier:

    PHP:
    preg_match ( '/\s*<span class="boxLine1">([a-z0-9\s.:\\/?!-]+)<span class="skip"> &ndash; <\/span><\/span>\s*\r?\n\s*<span class="boxLine2">([a-z0-9\s.:\\/?!-]+)<\/span>\s*/i' $content $matches );
    und wozu ist das gut?

    PHP:
         if ( $matches ) {
        } else {
            return 
    NULL ;
        }
    Allerdings hab ich festgestellt, dass das Script von cable leider den falschen Track ausgibt. Es ist nicht der aktuelle..

    Das selbe will ich auch noch hier machen: Playlists | Fritz vom rbb (und das hört man)
    Dort brauch ich dann quasi aus der ersten Tabelle das letzte Element.. Wäre super wenn mir jemand hilft

    Danke euch Leute
     
  8. 2. Dezember 2010
    AW: Webseite parsen mit DOM

    Als ich die Seite aufgerufen habe hat sich der Track geändert, also iFrame oder Ajax => Chrome Entwickler Tools auf => Ajax Request
     
  9. 2. Dezember 2010
    AW: Webseite parsen mit DOM

    Okay und was kann ich jetzt genau damit machen?
     
  10. 2. Dezember 2010
    AW: Webseite parsen mit DOM

    Auswerten und die Daten dadraus benutzen die du willst/brauchst?


    Ist ähnlich wie mit einer XML Datei. Die benutzt du ja auch um Daten auszulesen.
    Mit json_decode werden die Daten in Arrays gespeichert und du kannst dir deine gewünschten Arrays ausgeben.


    Edit:// Hab mir die .json mal angeguckt bisschen mehr als json_decode muss man doch machen also mal ein Beispiel:

    PHP:
    <? php
    $jsonFile 
    'http://on3.de/tracklist/get_tracklist_data' ;
    $fp  fopen ( $jsonFile , "r" );
    if (
    $fp )
    {
     while(!
    feof ( $fp ))
     {
      
    $json  fgets ( $fp );
     }
     
    fclose ( $fp );
    }


    $decode = get_object_vars ( json_decode ( $json ));

    //ergibt die ganze tracklist
    echo  $decode [ 'tracklist' ];
    Ich weiß jetzt nicht ob du den letzten Eintrag haben willst oder die ganze Playliste?
     
  11. 3. Dezember 2010
    AW: Webseite parsen mit DOM

    na ich bräuchte den aktuellen.. der ist glaube an der 11. position. war zumindest so als ich gerade geguckt habe..
     
  12. 3. Dezember 2010
    AW: Webseite parsen mit DOM

    Das Script von mir mal getestet?
    Der aktuelle Song ist immer ganz unten aufgelistet ^^


    Ist doch klein Problem also:

    PHP:

    $jsonFile 
    'http://on3.de/tracklist/get_tracklist_data' ;
    $fp  fopen ( $jsonFile , "r" );
    if (
    $fp )
    {
     while(!
    feof ( $fp ))
     {
      
    $json  fgets ( $fp );
     }
     
    fclose ( $fp );
    }


    $decode = get_object_vars ( json_decode ( $json ));

    $tracklist $decode [ 'tracklist' ];

    preg_match_all ( '/<span class="boxLine1">([a-z0-9()@ ]+)<span class="skip"> &ndash; <\/span><\/span>\s*<span class="boxLine2">([a-z()@0-9 ]+)<\/span>/i' $tracklist $treffer PREG_SET_ORDER );

    echo 
    $treffer [ count ( $treffer )- 1 ][ 0 ];

    Du solltest dich aber aufjedenfall in RegEx einabeiten wenn du weiterhin soetwas machen willst. Hier wird dir denke ich mal wird dir nicht immer weiter ein fertiges Script gegeben. ^^

    Musst den RegEx vllt nur noch ein wenig erweitern. Bis jetzt erkennt er Buchstaben durch /i ist die groß/kleinschreibung egal da es case insensitiv wird. Dann noch Zahlen von 0-9, Klammern und das @ Zeichen.


    Edit:// Ahh jetzt weiß ich was du meintest mit 11 Stelle. Ist aber nicht immer die 11 Stelle.
    Das ist ja doof, dann musst du dir halt noch das DIV mit der Uhrzeit holen und abgleichen und dir dann das richtige ausgeben lassen oder du greifst auf cabels script zurück, was sich die Info von der Startpage holt.
     
  13. 3. Dezember 2010
    AW: Webseite parsen mit DOM

    ganz unabhängig von dem rest des threads, den ich mir auch garnicht erst groß druchgelesen habe...
    ich habe mich eben bei dem titel direkt an dies hier denke müssen:
    Yahoo! Query Language (YQL) erklärt | PHP Gangsta - Der PHP Blog mit Praxisbezug

    vllt mal durchlesen und ausprobieren, könnte dir ggf. helfen
     
  14. 6. Dezember 2010
    AW: Webseite parsen mit DOM

    oh man das ja auch umfangreich.. mal sehen ob ich damit klar komme.. aber danke schonmal
     
  15. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.