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.
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 +.