Extraire les liens d'une page avec les expressions regulières et DOM

Pour extraire les liens d'une page web, il existe 2 approches: la recherche de balises HTML en utilisant les expressions régulières (preg_match) et en utilisant l'objet DOMDocument.

arrow Expressions régulières: parcourir un texte pour trouver les 'portions' correspondant à un masque.
Voir les expressions régulière sur Wikipedia

arrow Objet Dom Document: parser intégralement un document XML ou HTML pour construire un objet basé sur la structure du document.
Voir l'object Dom Document sur Wikipedia

Extraire les liens d'une page HTML avec les expressions régulières

function CrawlOnePage_Preg($url) {
    $urlParts = parse_url($url);
    $baseurl = $urlParts['scheme'].'://'.$urlParts['host'].'/';
    //Charger le code source de la page internet
    $pagesrc=file_get_contents($url);
    $urlList=array();

    if (preg_match_all("/<\s*a\s+[^>]*href\s*=\s*[\"‘]?([^\"' >]+)[\"‘ >]/isU",$pagesrc,$matches)) {
        foreach($matches[1] as $link) {
            if(eregi("http://",$link)) {
                $url = strip_tags($link);
            }
            else {
                $url = $baseurl.strip_tags($link);
            }

            $urlList[] = $url;
        }
    }
    return $urlList;
}

Extraire les liens d'une page HTML avec Dom Document

function CrawlOnePage_Dom($url) {  
    $dom = new DOMDocument('1.0');
    @$dom->loadHTMLFile($url);
    $urlList=array();

    $anchors = $dom->getElementsByTagName('a');
    foreach ($anchors as $element) {
        $href = $element->getAttribute('href');
        if (0 !== strpos($href, 'http')) {
            $href = rtrim($url, '/') . '/' . ltrim($href, '/');
            $urlList[] = $href;
        }
    }
    return $urlList;
}

Exemple : extraire les liens de la page d'accueil du site en utilisant Dom Document

$list=CrawlOnePage_Dom("http://fobec.com/CMS/index.php");
$listunique=array_unique($list);
echo 'la page index.php contient '.count($list).' liens <br>';
echo count($listunique).' liens sont uniques';

foreach($list as $link) {
    echo '<br>'.$link;
}
 

Ajouter un commentaire
Pseudo
Adresse email
Site internet (optionnel)
Votre commentaire