Navegando por SourceForge (http://sourceforge.net) me encontré con una interesante aplicación para parsear código HTML. Su nombre es PHP Simple HTML DOM Parser (http://sourceforge.net/projects/simplehtmldom/files/) y está orientada a parsear el DOM de HTML.
Primero vamos a descargarla e incluirla en nuestra aplicación de prueba. Un ejemplo básico de como utilizarla es:
<?php
//Basic HTML parsing with PHP
include("simplehtmldom/simple_html_dom.php");
//Pasamos todo el contenido de la pagina a texto plano
//echo $htmlCode = file_get_html('http://madhacking.com')->plaintext;
$htmlCode = file_get_html('http://madhacking.com');
// Encontrar todas las imageness
foreach($htmlCode->find('img') as $element)
echo $element->src . '<br>';
echo "<hr />";
// Mostrar todos los links
foreach($htmlCode->find('a') as $element)
echo $element->href . '<br>';
?>
Vamos a hacer un ejemplo que muestre todos los artículos de mi blog:
<?php
$htmlCode = file_get_html('http://madhacking.com');
$posts = $htmlCode->find('div[class=post]');
foreach($htmlCode->find('div[class=post]') as $article) {
$item['title'] = $article->find('h2', 0)->plaintext;
$item['info'] = $article->find('div[class=post-info]',0);
$item['body'] = $article->find('div[class=post-content]', 0)->plaintext;
$item['category'] = $article->find('div[class=post-meta]', 0)->plaintext;
$articles[] = $item;
}
echo "<pre>";
print_r($articles);
echo "</pre>";
?>
Como podéis ver el funcionamiento es muy sencillo y no requiere esfuerzo programar algo sencillo. Os dejo los enlaces del proyecto.
Página Oficial: PHP Simple HTML DOM Parser (http://simplehtmldom.sourceforge.net/) - Manual de Uso (http://simplehtmldom.sourceforge.net/manual.htm)
Si buscáis en SourceForge encontraréis proyectos similares, como:
_HTML Parser for PHP 4 (http://sourceforge.net/projects/php-html/)
_PHP Simple HTML SAX Parser (http://sourceforge.net/projects/simplehtmlsax/)
En NetTuts+ también hablan de esta librería para parsear HTML: Parsing and Screen Scraping with the Simple HTML DOM Library (http://net.tutsplus.com/tutorials/php/html-parsing-and-screen-scraping-with-the-simple-html-dom-library/).
En definitiva, se trata de una librería que no puede ahorrar mucho trabajo, si alguna vez has tenido que parsear HTML usando regex, lo entenderás.
Data Mining :D
He encontrado uno más que proporciona una sintaxis parecida a SQL para parsear: htmlSQL (http://www.jonasjohn.de/lab/htmlsql.htm).
Sí, se podría decir que es Data Mining, pero no tienes que usar ningún algoritmo, ni redes neuronales.
Alguien sabe como puedo procesar todos los elementos del html usando este parser?
Estoy usando éste code para sacar todos los <a>, pero necesito que procese todos (img, link, script, etc etc)
foreach($html->find('a') as $link) {
Url_Absolutas_Cambio($link, $base_url);
}