Extraer todos los enlaces de un html con php

A veces nos encontramos con la necesidad de extraer ciertos datos de un html previamente creado o leido. Aqui os presento dos maneras muy sencillas de hacerlo.

Se puede hacer usando expresiones regulares que aplicadas al codigo extraigan solamente aquello que hemos acotado, o también se puede hacer recorriendo elementos del dom de la página con funciones especificas para ello. Vamos a ver las dos opciones para que podais experimentar y aplicar en vuestro código la que mas os convenga en cada caso.

Extraer links usando expresiones regulares

En este código veremos la manera de realizar la tarea de extracción de los enlaces usando una expresion regular :

$html = get_data("http://www.google.es");
preg_match_all("/]*"."href=[\"|\'](.*)[\"|\']/Ui", $html, $links);
$links = $links[1];
foreach($links as $link){
  echo $link."
";
}

Si vamos por partes, lo primero que hacemos es leer el contenido. En esta ocasion usando la funcion get_data que se explica en nuestro anterior post Cargar contenido externo de una url o pagina con php , aunque también se puede realizar usando la funcion nativa de php "file_get_contents".

Seguidamente aplicamos la funcion preg_match_all que nos va a crear un array con todas las coincidencias que encuentre de la expresión regular dentro del contenido. Una vez lo tenemos, ya solo nos queda recorrerlo y hacer lo que necesitemos con ellos. En el ejemplo, los pinta en pantalla uno debajo de otro.

Extraer links recorriendo el dom del html en php

En esta segunda opción, en vez de usar expresiones regulares lo que haremos será directamente ir a buscar aquellos elementos "a" dentro del codigo haciendo uso de las funciones de php destinadas a tratar el dom de un html.

$html = get_data("http://www.google.es");
$dom = new DomDocument();
$dom->loadHTML($html);
$links = $dom->getElementsByTagName('a');
foreach ($links as $link){
  foreach ($link->attributes as $a){
    echo $a."
";
  }
}

Volviendo a analizar el codigo, encontramos que la primera parte es exactamente igual que la anterior y por tanto tenemos varias opciones para leer el codigo html.

Una vez leido, creamos una nueva variable dom para insertar el documento html leido y poder asi utilizar las funciones especificas para recorrerlo. En este caso, getElementsByTagName nos va perfecto para buscar todos los enlaces y extraer su información.

Como podemos ver, en este caso la información que esta función nos da es mucho mayor que antes y por tanto debemos recorrerla de otra manera para mostrar los datos leidos. El uso de var_dump nos será de gran utilidad para ver la estructura de datos que tenemos y poder tratar la información correctamente.

Pues esto es todo, ahora ya solo os queda experimentar un poco con el código ya que tiene muchas posibilidades.

No hay comentarios:

Publicar un comentario