11 agosto, 2008

Parseador simple para HTML/DOM en PHP

SimpleHTMLDom. Documentación. Descargar.

Se trata de un parseador implementado en PHP5+ que facilita enormemente manipular código HTML. Soporta HTML inválido y es capaz de encontrar etiquetas en una página HTML con selectores del estilo de jQuery.

Ejemplos:

  • Obtener elementos de HTML
    // Leer el DOM a partir de la URL
    $html = file_get_html('http://www.google.com/');
    
    // Encuentra todas las imágenes
    foreach($html->find('img') as $element)
           echo $element->src . '
    ';
    
    // Encuentra todos los enlaces
    foreach($html->find('a') as $element)
           echo $element->href . '
    ';
    
  • Modificar elementos HTML
    // Crea una estructura DOM a partir de una cadena
    $html = str_get_html('
    Hola
    Mundo
    '); $html->find('div', 1)->class = 'barra'; $html->find('div[id=hola]', 0)->innertext = 'tonta'; echo $html; // Lo que genera:
    tonta
    mundo
  • Extrae contenido desde HTML
    // Vuelca el contenido (sin etiquetas) de HTML, o sea, convertir a texto
    echo file_get_html('http://www.google.com/')->plaintext;
    
  • Filtrado del código HTML de SlashDot.org
    // Leer el DOM a partir de la URL
    $html = file_get_html('http://slashdot.org/');
    
    // Encontrar todos los bloques de artículos
    foreach($html->find('div.article') as $article) {
        $item['title']     = $article->find('div.title', 0)->plaintext; // extrae el título
        $item['intro']    = $article->find('div.intro', 0)->plaintext;  // extrae la intro
        $item['details'] = $article->find('div.details', 0)->plaintext; // extrae los detalles
        $articles[] = $item;
    }
    
    print_r($articles);
    

14 comentarios:

Anónimo dijo...

Pues está fantástico!!!

Anónimo dijo...

Genial justo lo que estaba necesitando!!!

Anónimo dijo...

A mí me sale este error:
Call to undefinied function file_get_html()

Àl dijo...

Probablemente porque no estás incluyendo la librería necesaria, SimpleHTMLDom, que está enlazada al principio del artículo.

Anónimo dijo...

Jeje, pues era eso.
La verdad es que un par me van a ser muy útiles.
Gracias :)))

Gilberto dijo...

Lo voy a probar al instante justo lo que andaba necesitando y con poco tiempo para hacerlo yo mismo :D Muchisimas gracias!!

limbo992 dijo...

Hola a todos tengo un problema con un programa que he hecho con la libreria esta, en el servidor de mi casas funciona perfectamente pero al subirla al servidor no funciona aunque no me da ningun tipo de error el firefox se queda en blanco y el explorer me da problemas de conexion. Se le ocurre a alguien algo?

milthon dijo...

Para que funcione correctamente se tiene que hacer un include de la librería SimpleHTMLDom.

Gracias por el aporte, me sera muy util

Portal dijo...

prueba agregando esto en el comienzo del codigo
set_time_limit(3600);
ini_set('memory_limit', '250M');


y activa la opcion mostrar errores desde htaccess de seguro de que tu proveedor hosting no lo tiene activo

Ricardo dijo...

Excelente post. Gracias

Anónimo dijo...

Excelente post muchas gracias muy útil realmente

Anónimo dijo...

No habia visto este articulo. Excelente!!
Ahora podre capturar noticias rss y poder ponerlas en mi web con mis propios estilos

Carlos Diaz dijo...

Llevo bastante utilizando este parseador, es fantástico y me quita muchíiiismas horas de trabajo al extraer los datos, lo último fueron 299.000 registros de una base de datos (2.5h con el script), os imagianis cuántas horas serían manualmente?...

Pero dependiendo de qué se quiere hacer se comiezan a descubrir carencias o limitaciones del parseador, supongo que de ahi viene el tema "Parseador Simple" jejeje

Lo que pretendo es que el script parsee cierta tabla en el que el ID se genera de manera dinámica. Estoy buscando como poder extraer el ID de la tabla por otras vias para poder enviarselo al script y poder parsear la tabla que contiene ese ID... alguien podría, al menos, señalarme el camino? grácias.

Àl dijo...

Me alegro, Carlos. Pero no puedo ayudarte. Hace mucho que dejé estar todo este mundo. Has probado a preguntar en el origen del código (autor)

Publicar un comentario en la entrada

Últimos links en indiza.com