Saltar al contenido
Codifíca.me | Desarrollo web | Programación

Como extraer los datos de una página web

24 octubre, 2014

En este tutorial vamos a extraer los datos de una página web, este proceso también se denomina scrappear.

Vamos a utilizar PHP que es bastante sencillo.

Primero empezamos por identificar las url de las que queremos extraer al información o scrappear.
Podéis descargaros el sitemap de algún sitio y hacer un bucle y extraer así toda la información de toda la página web.

Pero vamos a empezar por una sola url, lo recomendable es que el sitio tenga un formato parecido o identico en su estructura, por ejemplo tiendas online, foros, canales de youtube…

Para este tutorial yo utilizo Firebug para recorrer el código, pero es totalmente opcional y no es necesario instalarlo en tu navegador, aunque a mi me gusta para cualquier desarrollo web. Si tienes Firefox y quieres instalar Firebug lo tienes en el siguiente enlace.

No me enrrollo más y vamos al lio!

Lo primero es ver que página web queremos extraor los datos, obtenmos la url:

http://www.tupagina.com/tu-url

Ahora vamos al código común que te valdrá para scrappear cualquier web:
Cambia tu url por la que viene en el código siguiente.

        //evitar problemas de codificación
        header('Content-Type: text/html; charset=utf-8');   
        // la url
        $urlCT = "http://www.tupagina.com/tu-url";
        
        $ch = curl_init($urlCT);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $cl = curl_exec($ch);
        
        // Los elementos Dom de la página que vas a reccorrer
        $dom = new DOMDocument();
        @$dom->loadHTML($cl);
        
        // La ruta del elemento
        $xpath = new DOMXpath($dom); 

Llegamos a este punto y empezamos a seleccionar de la página los elementos que queremos copiar, en este caso, cogeremos el título del producto, como muestra la imagen.

xpath

Le damos con el boton derecho y en nuestro firebug, o en el depurador que nos da el propio navegador le damos a seleccionar Xpath o en Español seleccionar identificador de elemento único.

Lo copiamos y nos devuelve esto

/html/body/div[1]/div/div[4]/div[1]/div[3]/div[2]/div[1]/div[2]/h1

/html/body/section[2]/section/article/section/header/a/h1

Nos quedamos con esta parte y como queremos conseguir el texto añadimos la barra y la propiedad text, así /text()
/div[1]/div/div[4]/div[1]/div[3]/div[2]/div[1]/div[2]/h1

$eltitulo = $xpath->query('//div[1]/div/div[4]/div[1]/div[3]/div[2]/div[1]/div[2]/h1/text()');  

Hacemos lo mismo con la imagen nos quedaría algo así:

/div[1]/div/div[4]/div[1]/div[3]/div[2]/div[1]/div[1]/div/div/a/img

Añadimos @src

Este es el resultado.

$laimagen = $xpath->query('//div[1]/div/div[4]/div[1]/div[3]/div[2]/div[1]/div[1]/div/div/a/img/@src');  

Y ahora podríamos seguir recogiendo así lo que queramos de la misma manera, pero con estos ejemplos yo creo que vale.

 $titulo = $eltitulo->item($x)->nodeValue;
 $imagen = $laimagen->item($x)->nodeValue;

Y ya podemos mostrar los datos como queramos o insertarlos en una base de datos, o lo que queráis.

echo $titulo;
echo $imagen;

¿Fácil no? Pues si te ha gustado me gustaría que lo compartieses o que me dieses un más 1 en Google +.