Cómo extraer información de una web con PHP

El proceso de extraer información de una web es denominado técnicamente como scrapping. En este artículo os contaré como funciona el scrapping, que nunca viene mal, y luego las distintas formas de realizar esto usando el lenguaje de programación web PHP.

¿Qué es scrapping?

El scrapping es una técnica que simula la navegación de un ser humano para extraer información de una página web. De esta forma los buscadores puedes examinar el contenido de las páginas webs para posicionarlas correctamente. En el caso de los buscadores se apoyan mayormente en el uso de palabras que se repiten mucho o en las etiquetas con valor semántico (Rich snippets).

Los desarrolladores utilizamos el scrapping comúnmente con el objetivo de copiar y pegar texto, además podríamos incluso en casos más avanzados a iniciar sesión en una web y de ahí poder extraer todavía más información, aunque como está claro hay webs que nos lo impedirán mediante el uso de captcha.

Método básico

Existe un método básico para realizar la acción de copiar y pegar sin demasiadas complicaciones.

// Creamos un contexto para la petición de obtener el contenido de la web. En este caso el contexto
// define que si el tiempo de respuesta es mayor que cinco, que termine la conexión.
$context = stream_context_create(array('http' => array('timeout' => 5)));

// Definimos la URL, en este caso de ejemplo será example.com
$url = "http://example.com/";

// Con la función file_get_contents() obtenemos en una cadena el contenido de la web
$codigo = file_get_contents($url, 0, $context);

// Creamos un objeto de la clase DOMDocument al que le pasaremos la cadena que guarda todo el HTML
// mediante el método loadHTML()
$doc = new DOMDocument();
$doc->loadHTML($codigo);

La variable $doc, que es una instancia de la clase DOMDocument ya tiene todo el código cargado y a partir de aquí podemos realizar con él lo que queramos. En este caso de ejemplo vamos a extraer los <p> que tiene la web example.com.

$p = $doc->getElementsByTagName('p');

foreach($p as $texto){
echo "El texto extraído es: " . $texto->nodeValue . "<br>";
}

Hemos utilizado uno de los métodos que tiene la clase DOMDocument para obtener todos los elementos de cierta etiqueta que se encuentra en el código HTML. Aparte tiene muchos más métodos que puedes consultar aquí.

Para realizar scrapping de forma más avanzada podemos utilizar cURL, del cual hablaremos en otros artículos.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *