- Home
- Categorie
- Coding e Sistemistica
- PHP
- Estrazione (Parsing) dati da sorgente html
-
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.
-
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.