Écrit par keysart
|
04 Août 2010
Pour parser un code HTML, quelques solutions s'offrent à nous.
Pourquoi ne pas utiliser nos bonnes lourdes expressions régulières? Et bien parcequ'il y a domDocument de PHP. Une classe qui permet de récupérer nos balises à la façon Javascript.
Récupérer un code HTML
Pour cela, vous pouvez utiliser la function file_get_contents() si la source est un fichier HTML brut.
Pour les pages distantes, une autre méthode consiste à utiliser la fonction Wget ou cUrl dans un exec() si tant est qu'elle soit installer sur votre serveur.
Exemple avec cUrl :
exec('curl '.$url.'', $output);
print_r($output);
Je vous invite grandement à faire un "man curl" ou "man wget". La liste des possibilitées est impressionnante.
Avec cUrl ou Wget, vous pouvez lors de l'appel d'une url poster des variables en GET ou POST.
Ainsi vous pourrez récupérer le contenu de pages nécessitant des variables en POST ou en GET.
Bref, ce n'est pas le sujet. Maintenant que vous avez votre code HTML voici comment le parser.
domDocument
$page='<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Notre Document</title>
</head>
<body>
<div id="content">
<div>
<p>What's up dude !!</p>
</div>
<div><img src="/notreimage" /></div>
</div>
</body>
</html>
';
//Pour eviter d'avoir l'affichage d'erreurs lors du loadHTML
libxml_use_internal_errors(true);
//On initialise l'objet
$dom = new domDocument;
//On charge notre page HTML, pour XML c'est loadXML
$dom->loadHTML($page);
//On ne travail que dans le bloc id="content"
$id = $dom->getElementById('content');
//On recupere les balises <p>, il peut y en avoir plusieurs
//On les compte en faisant : $id->getElementsByTagName('p')->length;
//Et le item(0) est le premier <p> trouvé, pour avoir les
//suivants item(1), item(2), etc...
$find = $id->getElementsByTagName('p');
$item->Paragraphe = $find->item(0)->nodeValue;
//Idem pour les balises <img>
$find = $id->getElementsByTagName('img');
$item->Image = $find->item(0)->getAttribute('src');
echo "Le contenu de notre paragraphe est : ".$item->Paragraphe.".
Et l'url de notre image est : ".$item->Image."";
Ceci est une courte description, php.net vous offre la doc complete.
Vous pourrez l'utiliser comme aggregateur de contenu, savoir si vos sites ont une structure HTML valide, etc...