Web scraper con PHP

scraper
Alguna vez te has planteado crear un programa que pueda extraer información de una web y has pensado que es un tarea realmente complicada. Vas a comprobar que es realmente sencillo poder sacar información de otra web. Empezaré con un ejemplo muy básico, después comentaré algunos framework que ayudarán al rastreo y extracción de datos y por último una aplicación que he conocido recientemente en la que puedes crearte un API con datos de una web.

Ejemplo básico

Antes que nada en este ejemplo básico vamos a usar dos funciones que son:

  1. file_get_contents: tiene como parámetro una URL y devuelve el contenido en HTML de esta. Ver documentación
  2. preg_match: sirve para encontrar coincidencias dentro de una cadena, usando expresiones regulares. Ver documentación

En el siguiente ejemplo vamos a sacar el título de mi web, que es lo que está dentro de la etiqueta <title> (en este caso es: Blog | Nicolás Marín)

$html = file_get_contents('http://www.nicolasmarin.com/');
preg_match('/<title>(.*)<\/title>/i', $html, $title);
$title_out = $title[1];

Y poco más se puede decir de este sencillo ejemplo, que sólo hace falta ponerle un poco de creatividad y sacarás cualquier elemento de una web.

Frameworks en PHP

En esta sección vamos a comentar algunos de los frameworks más completos que he encontrado para PHP, no se trata de una documentación ni de ejemplos porque esto ya lo encontrarás en cada una de las webs de dichas librerías. Estos son los frameworks para scrapear en PHP:

  1. Goutte : es una librería de rastreo web en PHP. Goutte proporciona una agradable API para rastrear sitios web y extraer los datos de las respuestas ya sea HTML o XML. Ha sido creado con Symfony2, por lo que si tu proyecto PHP empleas este framework te viene genial para integrarlo.
  2. Guzzle: es un framework que incluye las herramientas necesarias para crear un cliente robusto de servicios web. Incluye: descripciones de Servicio para definir las entradas y salidas de una API, iteradores para recorrer webs paginadas, procesamiento por lotes para el envío de un gran número de solicitudes de la manera más eficiente posible. También ha sido creado usando Symfony2.
  3. Snoopy: es una clase PHP que simula un navegador web. Automatiza la tarea de recuperar los contenidos de la página web y la publicación de los formularios, por ejemplo.
  4. PHPCrawl: es un framework para el rastreo de sitios web usando el lenguaje de programación PHP, por lo que es conocido como la librería webcrawler o rastreador de PHP. Ofrece varias opciones para especificar el comportamiento de la extracción como filtros Content-Type, manejo de cookie, manejo de robots.txt, limitación de opciones, multiprocesamiento y mucho más.

Import.io

Interesante proyecto en el que puedes acceder a cualquiera web como si tuviera un API, sin necesidad de que ésta lo ofrezca. Sólo tienes que crear un conector desde un programa que te descargas e indicar los datos que vas a extraer de tal web y el ya se encarga de ofrecértelo en un formato más cómodo. Lo bueno también es que si en algún momento la estructura del HTML de la web cambia este te avisa para que le vuelvas a indicar donde están los datos que deseas sacar.
Visita Import.io

Si conoces otros framework o aplicaciones similares a import.io compártelas en un comentario 🙂

You may also like...

  • mrr276

    Muy bueno Niko, aportazo, me has ayudado doble, ya que impor.io no lo conocía y tiene muy buena pinta!

    • Pues si es muy interesante import.io, aunque no he tenido tiempo de trastear con él 🙂

  • H.v. Sombrilla

    Buen post Nicolás. Yo con la clase simple_html_dom.php trabajo a la perfección. Extraigo valores, atributos, ids, contenedores completos como texto plano y muchas cosillas. Hasta ahora no he necesitado nada fuera de ahí.

    • jose armando

      en donde puedo encontrar esa clase amigo??

      • H.v. Sombrilla

        http://simplehtmldom.sourceforge.net/

        ahí está la descarga y la documentación necesaria. En mi web dominicanito.net la uso para algo como lo que quieres, ya que extraigo los precios de los combustibles de la página de un periódico local que actualiza diario

  • jose armando

    amigo me puedes ayudar necesito obtener algunos datos de una pagina tales como precio y descripción de un producto. algún manual mas completo con el que pueda empezar¡? te dejo mi correo a ver si me hechas una mano. [email protected].

  • Carolina

    Excelente post Nico, probare import.io a ver como me va, gracias por compartir 😀

  • chuco19

    Con el file_get_contents creo que es casi que facilisimo (los frameworks aveces desesperan). La única duda que me queda es cada cuando correr el crawler y como definirle que webs visitar… Investigare mas al respecto.

  • Angel

    hola Nico, estoy tratando de hacer un script que me obtenga todas las URLs de un sitio web, tienes alguna idea de como podria hacerlo?

  • Doc Kodam

    Tienes alguna idea para scrapear desde un archivo flash(amf) y también desde un pdf?
    Por cierto creo que kimonolabs.com es como Import.io.

  • que buena info! vamos a probar a ver si aun funciona. Sería bueno si salieran actualizaciones actualizar el post no 😉

  • felix

    Me parece muy interesante la de goutte. Buen artículo!!