venerdì 3 aprile 2015

HTML Dom Parser in PHP

In questo post viene descritto come estrarre i dati da una pagina HTML. Cio' mi e' stato richiesto perche' una ditta offre un servizio di pubblicazione dati (peraltro forniti con licenza Common Creative) in formato CSV solo a seguito di autenticazione mediante un Captcha impedendo di fatto il download automatico

I medesimi dati sono pero' pubblicati anche all'interno di una tabella di una pagina HTML piuttosto complessa. Per "catturare" i dati si puo' analizzare il Document Object Method HTML (DOM) mediante la libreria Simple HTML Dom (http://simplehtmldom.sourceforge.net/) che indicizza i tag e permette di creare per esempio degli array php a partire da tag table

una volta importata la pagina html (anche da un link web oltre che file) nell'esempio sottostante e' stata selezionata la seconda tabella presente nel codice (linea evidenziata in giallo). Il contenuto della tabella e' salvato nell'array rowData

--------------------------------------------------------
<?php
require('simple_html_dom.php');
$html = file_get_html('http://xxxxxxx');

$table = $html->find('table', 2);
$rowData = array();

foreach($table->find('tr') as $row) {
    $flight = array();
    foreach($row->find('td') as $cell) {
        $flight[] = $cell->plaintext;
    }
    $rowData[] = $flight;
}
--------------------------------------------------------

La libreria funziona anche su pagine html non perfettamente formattate (per esempio con tag aperti e non chiusi)