Web scraping y procesamiento XML con PHP

web-scraping-xml-php

El web scraping es una técnica que permite leer el contenido de un sitio web mediante un software con la finalidad de extraer datos del sitio por ejemplo. Los motores de búsqueda como Google utilizan estas técnicas para analizar e indexar los contenidos de los sitios web. Además, entre los usos más comunes encontramos recolección de datos, comparación de precios, simulación de navegación, testing, etc.

Por otro lado, el uso del web scraping ha sido y es un poco controversial, debido a que muchas veces puede violar los términos y condiciones de uso de los sitios web; ya que como todas las tecnologías pueden ser usadas para bien o para mal.

En este artículo el objetivo es presentar la librería PHP Simple HTML DOM Parser ideal para realizar tareas de web scraping o manipulación y procesamiento de archivos XML. Lo particular de esta librería es que replica la forma de buscar elementos HTML de JQuery usando “selectors”, por lo que les resultará muy familiar a los usuarios del popular framework JavaScript.

Veamos un ejemplo de uso

// Creamos un objeto DOM directamente desde una URL
$html = file_get_html('http://www.google.com/');

// buscamos todas las imagenes y mostramos el path de la imagen
foreach($html->find('img') as $element)
       echo $element->src . '
'; // buscamos todos los enlaces y mostramos su URL foreach($html->find('a') as $element) echo $element->href . '
';

Como ven es una librería extremadamente sencilla de usar y muy potente gracias a la combinación de PHP y JQuery. Puede ser empleada para procesar tanto contenido HTML extraído de sitios web como contenido XML recibido desde web services por ejemplo.

Funcionalidades interesantes

Permite modificar elementos HTML

//
Hello
World
$html->find('div', 1)->class = 'bar'; $html->find('div[id=hello]', 0)->innertext = 'foo'; //salida:
foo
World

Selectores descendientes

// Encuentra todos los  en  cuya class=hello
$es = $html->find('table.hello td');

Selectores anidados

// Encuentra todos los 
  • en
      foreach($html->find('ul') as $ul) { foreach($ul->find('li') as $li) { // tu código aquí... } }
  • Uso de atributos mágicos

    $html = str_get_html("
    foo bar
    "); $e = $html->find("div", 0); echo $e->tag; // Retorna: " div" echo $e->outertext; // Retorna: "
    foo bar
    " echo $e->innertext; // Retorna: " foo bar" echo $e->plaintext; // Retorna: " foo bar"

    Además de todas las funcionalidades vistas en este artículo la librería Simple Html DOM parser proporciona muchas más características muy interesantes; también destacamos que es de libre uso bajo licencia MIT por lo que les recomiendo que la descarguen y prueben.

    Manual:
    http://simplehtmldom.sourceforge.net/manual.htm
    Descarga:
    http://simplehtmldom.sourceforge.net

    Juan Benitez

    Fundador de Tecnopedia.net. Licenciado en Informática, desarrollador Web, Android y PHP. Apasionado de las tecnologías y el fútbol. Reparto mis días programando, creando sitios, apps o escribiendo en @Tecnopedianet... y sí, además tengo esposa y una hija ;)

    View all posts by Juan Benitez →