• User

    Estrazione (Parsing) dati da sorgente html

    Salve a tutti, mi sto cimentando - come da titolo - nell'estrazione di alcuni dati da una struttura nidificata di elementi HTML.

    Questa è la struttura ricorrente

    
    <div class="nomeclasse">
    <a href="link_immagine_da_estrarre"><img src="url_immagine_da_estrarre/immagine.jpg" border=1 width=200 class="frame"></a><br>
    <h2>
    <a href="link">
    TERZO VALORE DA ESTRARRE<br />
    <b>QUARTO VALORE DA ESTRARRE</b>
    </a>
    </h2>
    </div>
    
    

    Ho già fatto qualcosa di simile per una struttura più semplice, senza gli "a capo", usando la funzione preg_match_all, sfruttando le regular expression.
    Non riesco però a creare il pattern della regular expression per il codice qui sopra.
    Non so se procedere con questo metodo o se passare alla funzione DOMdocument di PHP.

    Qualcuno mi saprebbe dare un consiglio o un input che possa aiutarmi poi a proseguire?
    Volendo sfruttare una semplice preg_match_all, quale sarebbe la regular expression corretta?

    Grazie mille.


  • User

    Alla fine ho risolto il problema e vi posto la soluzione.

    Ho utilizzato la classe di funzioni simplehtmldom 1.5 ed eseguito il parsing ciclico sfruttando le capacità del DOM in questo modo:

    
    $items = $html->find('div[class=nomeclasse]');  
    foreach($items as $post) {  
        # remember comments count as nodes  
        $articles[] = array($post->children(0)->href, $post->children(0)->first_child()->src,  $post->children(2)->children(0)->innertext);  
    }
    
    

    In questo modo ho estratto il terzo ed il quarto valore in un unica stringa, poi ho separato i valori tenendo solo quello che mi serviva (il quarto, che si trovava tra i tag <b></b>) con una preg_match.

    
    $regex_pattern = '/<b>(.*)<\/b>/';
    preg_match_all($regex_pattern, $articles*[2], $matches);
    $quarto_valore = $matches[1][0];
    
    

    Per verificare nel codice quali siano effettivamente i nodi, quindi i child, ho utilizzato il DOM inspector nativo di Chrome che mi ha alleggerito la lettura del sorgente. 😉

    A buon rendere.
    Buone vacanze a tutti.