Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: madpitbull_99 en 22 Mayo 2011, 16:21 pm



Título: Parsear HTML con PHP – Simple HTML DOM Parser
Publicado por: madpitbull_99 en 22 Mayo 2011, 16:21 pm
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:

Código
  1. <?php
  2.    //Basic HTML parsing with PHP
  3.    include("simplehtmldom/simple_html_dom.php");
  4.  
  5.    //Pasamos todo el contenido de la pagina a texto plano
  6.    //echo $htmlCode = file_get_html('http://madhacking.com')->plaintext;
  7.  
  8.    $htmlCode = file_get_html('http://madhacking.com');
  9.  
  10.    // Encontrar todas las imageness
  11.    foreach($htmlCode->find('img') as $element)
  12.       echo $element->src . '<br>';
  13.  
  14.    echo "<hr />";
  15.  
  16.    // Mostrar todos los links
  17.    foreach($htmlCode->find('a') as $element)
  18.       echo $element->href . '<br>';
  19.  
  20. ?>
  21.  

Vamos a hacer un ejemplo que muestre todos los artículos de mi blog:

Código
  1. <?php
  2.    $htmlCode = file_get_html('http://madhacking.com');
  3.    $posts = $htmlCode->find('div[class=post]');
  4.  
  5.    foreach($htmlCode->find('div[class=post]') as $article) {
  6.        $item['title']     = $article->find('h2', 0)->plaintext;
  7.        $item['info']      = $article->find('div[class=post-info]',0);
  8.        $item['body']      = $article->find('div[class=post-content]', 0)->plaintext;
  9.        $item['category']  = $article->find('div[class=post-meta]', 0)->plaintext;
  10.        $articles[] = $item;
  11.    }
  12.  
  13.    echo "<pre>";
  14.    print_r($articles);
  15.    echo "</pre>";
  16.  
  17. ?>
  18.  

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.


Título: Re: Parsear HTML con PHP – Simple HTML DOM Parser
Publicado por: Nakp en 22 Mayo 2011, 20:05 pm
Data Mining :D


Título: Re: Parsear HTML con PHP – Simple HTML DOM Parser
Publicado por: madpitbull_99 en 23 Mayo 2011, 21:27 pm
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.


Título: Re: Parsear HTML con PHP – Simple HTML DOM Parser
Publicado por: BlackM4ster en 1 Abril 2014, 09:54 am
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)

Código
  1. foreach($html->find('a') as $link) {
  2. Url_Absolutas_Cambio($link, $base_url);
  3. }