DOM Tree parsing con PHP: phpQuery

Attenzione! Questo contenuto è vecchioQuesto articolo risale al 2009, quindi i contenuti e le operazioni qui consigliate potrebbero essere diventate obsolete nel corso del tempo.

Quanti di voi non conoscono la libreria javascript jQuery? Penso pochi, se non nessuno. La potenza espressiva di questa libreria javascript permette una vastità quasi infinita di metodi di accesso agli elementi del DOM. La parte più interessante di questa libreria è senza dubbio la potenza del motore di selezione degli elementi, il Sizzle CSS Selector Engine.

Ora, quanti di voi programmatori PHP si saranno chiesti se questa potenza dei selettori sia applicabile anche a script PHP server-side che fungono da data crawler o data mining?
Penso parecchi.

Navigando in internet, ovviamente, la soluzione è già stata trovata ed il suo nome+link è PHPQuery Ecco un rapidissimo esempio di quello che questa classe può offrire: scarichiamo la index di google e troviamo i suoi link nel footer (Pubblicità, Soluzioni Aziendali, Tutto su Google, Google.com in English)

<?php
    require_once "class.phpquery.php";
    $document = phpQuery::newDocumentHTML( file_get_contents('http://www.google.it') );
    phpQuery::selectDocument($document);
    foreach ( pq ( 'span#footer a' ) as $link_footer_google ) {
        if ( pq( $link_footer_google ) -> html() != 'Privacy' ) {
            echo 'Link trovato nel footer della homepage di Google. Href=' . pq( $link_footer_google ) -> attr('href') . '; Text=' . pq( $link_footer_google ) -> html() . chr(10);
        }
    }
?>

Non mi dinlugherò in altri esempi più complessi per mostrarvi la potenza della classe: la pagina ufficiale di PHPquery offre già un ottimo manuale con le spiegazioni dei "metodi" sfruttabili.

Buon Lavoro!