Extraer links de una página web usando PHP



Extraer o encontrar todos los enlaces en una página web puede tener muchas aplicaciones o usos, como indexar un sitio web, encontrar enlaces de interés, comprobar si hay enlaces a tu sitio, buscar enlaces muertos, etc.

Para hacer esto vamos a utilizar una librería de PHP llamada Tidy y lo más posible es que no la tengas activada, así que busca tu archivo php.ini, y activa esta función

extension=tidy

Para activar esa función solo tienes que escribir el texto anterior en cualquier parte del archivo, pero lo más probable es que ya la tengas, pero que este como comentario con un punto y coma al inicio, en ese caso solo borra el punto y coma. Ahora reinicia PHP para tomar los cambios.

Si no sabes donde está el archivo php.ini, entonces debes leer este articulo que te dice como encontrar tu archivo php.ini

Ahora solo crea un archivo de PHP y escribe este código:

<?php
// Obtener el codigo HTML de la pagina a analizar
$url = 'https://www.google.com';
$html=file_get_contents($url);
$doc = new DOMDocument();
$opts = array('output-xhtml' => true,
              'numeric-entities' => true);
$doc->loadXML(tidy_repair_string($html,$opts));
$xpath = new DOMXPath($doc);
$xpath->registerNamespace('xhtml','http://www.w3.org/1999/xhtml');
foreach ($xpath->query('//xhtml:a/@href') as $node) {
    $link =  (( substr($node->nodeValue,0,4) == 'http' ) ?  $node->nodeValue : $url . $node->nodeValue ) ;
    // Ok, ya tienes el link, has lo que necesites con el.
    print $link . "<br>";
}
?>

Al ejecutar el código verás una lista con todos los enlaces encontrados, solo tienes que cambiar esta línea para indicar la página que vas a analizar:

$html=file_get_contents('https://www.codigonaranja.com/');

Y como ves, luego hay un ciclo foreach en donde se buscan todos los enlaces y se colocan en la variable $link, ahora que tienes cada uno de los enlaces puedes procesarlos y hacer lo que desees.

Deja una respuesta

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