phpQuery est une librairie PHP qui permet la sélection d’élément DOM avec PHP de la maniéré de jQuery.
Dans ce tuto, nous allons utiliser cette librairie pour créer un robot qui parcourt un site web contenant des images et les aspire.
Nous allons essayer d’aspirer les images « naruto » de la première page du manga-dream.
Le script est très dépendant de la structure HTML du site cible.
tout d’abord, on inclue la classe phpQuery:
include('phpQuery.php');
on crée la fonction pour copier les images du site web a notre ordinateur.
function save_image($inPath,$outPath) { $in= fopen($inPath, "rb"); $out= fopen($outPath, "wb"); while ($chunk = fread($in,8192)) { fwrite($out, $chunk, 8192); } fclose($in); fclose($out); }
on definit l’url de base
$base_url="http://www.manga-dream.com"; $url=$base_url. "/" ."naruto";
Puis on crée l’instance de phpquery et on obtient le code source (HTML) de la page distante:
$content=phpQuery::newDocumentFileHTML($url);
On obtient la liste des liens des pages contenant les images a télécharger:
on utilisant le plugin firebug de firefox on remarque que le lien de l’image se trouve dans la div de classe field-item puis dans une autre div pour enfin trouver le <a> tag contenant le lien vers l’image.
Donc, pour obtenir le lien:
$liens=pq(« div.field-item div a »);
le lien nous envoi a une autre page contenant l’image a télécharger:
de la même manière on obtient le code source puis on cherche le tag <img /> pour avoir l’attribue « src ».
Voici le script php permettant d’aspirer les images.
<?php // inclure la classe include('phpQuery.php'); // temps d'execution illimité pour le script set_time_limit(0); //fonction pour enregistrer l'image function save_image($inPath,$outPath) { $in= fopen($inPath, "rb"); $out= fopen($outPath, "wb"); while ($chunk = fread($in,8192)) { fwrite($out, $chunk, 8192); } fclose($in); fclose($out); } // definir l'adresse du site cible $base_url="http://www.manga-dream.com"; //definir l'adresse du manga a télécharger $url=$base_url. "/" ."naruto"; //obtenir le contenu html de la page "http://www.manga-dream.com/naruto" $content=phpQuery::newDocumentFileHTML($url); //obtenir la liste des liens $liens=pq("div.field-item div a"); $i=0; //parcourir les liens et pour chaque lien on récupère l'attribue "href" foreach($liens->elements as $l){ $lien=$base_url.$l->getAttribute('href'); $img_lien=phpQuery::newDocumentFileHTML($lien); $img_src=pq("div.media-gallery-detail img")->attr('src'); save_image($img_src,'./image' . $i . '.jpg'); $i++; } ?>
Après ça, comment est ce qu’on peut améliorer le script ?
- l’étendre pour parcourir toutes les pages du manga.
- parcourir tous les manga du site et les télécharger en créant un dossier pour chaque manga.
- …
Cet article Créer un aspirateur avec phpQuery est apparu en premier sur kawageek.