Comment extraire les liens d'une page Web en PHP ?

Réponses rédigées par Antoine
Dernière mise à jour : 2020-01-12 19:53:43
Thèmes : webmaster - php - curl
Question

Comment faire pour extraire tous les liens et URL d'une page Web avec PHP ?

Réponse

Vous pouvez extraire tous les liens d'une page Web, avec PHP et Curl.

On utilise Curl pour se connecter à la page et récupérer tout son code HTML. On utilise ensuite les CLASS PHP DOMDocument et loadHTML pour analyser le code HTML selon une expression Xpath.

L'expression Xpath qui permet d'identifier toutes les balises de lien <a> est :

evaluate("/html/body//a");

Il suffit ensuite d'effectuer une boucle et de récupérer la propriété href de chaque lien :

getAttribute('href');

Voici le script complet pour extraire les liens d'une page Web en PHP, avec Curl :

<?php
$url_cible = $_GET["url"];
if (empty($url_cible)) {$url_cible = "https://www.google.com";}
echo "<div><b>URL cible</b> : " . $url_cible . "</div>";
echo "<div><b>Liste des liens relatifs et absolues</b> :</div>";
$userAgent = 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)';
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
curl_setopt($ch, CURLOPT_URL,$url_cible);
curl_setopt($ch, CURLOPT_FAILONERROR, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
$html= curl_exec($ch);
if (!$html) {
    echo "<br />cURL erreur numéro:" .curl_errno($ch);
    echo "<br />cURL erreur:" . curl_error($ch);
    exit;
}
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
$liens = $xpath->evaluate("/html/body//a");
for ($i = 0; $i < $liens->length; $i++) {
    $lien = $liens->item($i);
    $url = $lien->getAttribute('href');
    echo "$url<br>";
}
?>

Référez-vous à cette autre question pour obtenir d'avantages de solutions pour parser et extraire un contenu spécifique, tel que les liens d'une page Web, avec PHP.