Partage

Extraire des données d'un site internet

Sujet résolu
30 janvier 2013 à 19:16:59

Bonjour à tous,

Tout d'abord je tiens à préciser que je suis novice en programmation php, voir en programmation tout court..

Je cherche à créer un bout de code permettant d'extraire des informations d'un autre site internet.

Je donne un exemple, je cherche à récupérer le prix des objets d'un site marchand, où ce prix est clairement consultable dans le code source, pour pouvoir y faire des calculs quelconques par exemple.

C'est assez vague et peut-être pas très clair mais ça m'intrigue vraiment. Je n'ai rien trouvé sur le net qui traite vraiment de ce sujet, ou que des bouts. Je ne demande bien évidemment pas le code en entier (à moins que vous ayez du temps à y consacrer ^^) mais des pistes et des explications si possible.

J'ai bien évidemment essayer moi même de créer ce script mais je suis toujours bloqué à un certain moment et je ne pense pas être dans la bonne direction...

Merci d'avance de vos réponses.

30 janvier 2013 à 19:26:38

Il existe une fonction php qui te retourne le code HTML de la page passée en paramètre :

$content = file_get_contents("http://www.google.fr");
echo $content;

http://php.net/manual/en/function.file-get-contents.php pour plus de détails.

Ensuite il ne te reste plus qu'à utiliser des fonctions de php pour chercher du contenu spécifique dans une variable contenant du texte. Les expressions régulières peuvent être une piste.

Racam.fr - Blog sur l'informatique
30 janvier 2013 à 19:30:47

Pour récupérer le code HTML d'une page, tu vas utiliser un wrapper et notamment, un wrapper http, puisque c'est le protocole que tu utilises pour récupérer le code source de la page voulue.

Une fois que tu as stocké le code source de cette page dans une variable, ce n'est qu'une variable de chaine de caractères banale, comme une autre. On va alors parser cette variable pour récupérer les morceaux voulus. Pour ça, pas de secret, on étudie le code et on recherche un masque qui nous permet de les retrouver, c'est à dire un morceau redondant où la seule chose qui change, c'est ce que tu veux récupérer. Par exemple, tu veux récupérer le prix dans une balise "<div class="prix">".

Pour récupérer ça, on va alors utiliser les expressions régulières dont tu pourras trouver une explication dans le cours officiel du site sur le PHP. :)

30 janvier 2013 à 19:34:07

Merci de vos réponses.

J'ai en effet essayé cette méthode, puis j'ai appliqué un preg_match() pour chercher le premier prix qui m'interesse, ça pas de problème, mais je ne vois pas comment continuer ma recherche et sélectionné les prix qui sont plus bas dans le code. Il me renvoie sans cesse le premier prix...

De plus j'ai cru comprendre que preg_match() renvoyait un boolean et qu'il ne servait pas vraiment à renvoyer la valeur que je veux extraire (même si j'y parviens une première fois).

30 janvier 2013 à 19:41:38

Regarde la documentation sur la fonction preg_match(), tu verras que tu peux donner un argument $matches, c'est le troisième argument de la fonction, qui est un tableau. Ce tableau sera rempli avec toutes les occurrences trouvées. Il suffit ensuite de parcourir ce tableau avec foreach() pour les récupérer. :)

-
Edité par Aro 30 janvier 2013 à 19:42:27

30 janvier 2013 à 20:11:05

Peux tu me dire en prenant comme exemple cette page d'ebay, ce qui est nécessaire que je rajoute dans mon code ? Parce qu'après de nombreux essais je ne vois toujours pas ... =/

<?php
$adresse = "http://shop.ebay.fr/i.html?_adv=1&_nkw=&_in_kw=1&_ex_kw=&_sacat=11232&LH_Complete=1&_udlo=&_udhi=&_samilow=&_samihi=&LH_SALE_CURRENCY=0&_sop=12&_dmd=1&_ipg=50";
$page = file_get_contents ($adresse);

$i=1;
$condition=true;
while($condition==true){
	preg_match ('#<td class="lv-ps"><div class="lv-dvpr"><div class="lv-pb5 cm-clg"><b>(.*?)€</b></div><p class="lv-sd">#', $page, $prix);
    echo $prix[1];
	if($i==3){ // pour arreter la boucle sinon ça fait une boucle infini ...
	$condition=false;
	}
	$i++;
	}
?>

Merci de ton aide =)

30 janvier 2013 à 20:36:27

Je me suis un peu vautré dans mon message ci-dessus, j'ai confondu preg_match() et preg_match_all(), sa copine faite pour les recherche multiples.

Voilà ce que ça donne :

<?php

$adresse = "http://shop.ebay.fr/i.html?_adv=1&_nkw=&_in_kw=1&_ex_kw=&_sacat=11232&LH_Complete=1&_udlo=&_udhi=&_samilow=&_samihi=&LH_SALE_CURRENCY=0&_sop=12&_dmd=1&_ipg=50";
$page = file_get_contents ($adresse);

preg_match_all ('#<td class="lv-ps"><div class="lv-dvpr"><div class="lv-pb5 cm-clg"><b>(.*?)€</b></div><p class="lv-sd">#', $page, $prix);
// On stocke dans le tableau $prix les éléments trouvés

var_dump($prix); // Le var_dump() du tableau $prix nous montre que $prix[0] contient l'ensemble du morceau trouvé et que $prix[1] contient le contenu de la parenthèse capturante

for($i = 0; $i < count($prix[1]); $i++) // On parcourt le tableau $prix[1]
{
	echo $prix[1][$i]; // On affiche le prix
}



30 janvier 2013 à 22:21:22

Génial, ça correspond parfaitement !

Un grand merci à toi.

Une dernière question sur le code que tu m'as fait parvenir : le var_dump(), je n'ai pas bien compris son rôle et dans quel cas on l'utilise ?

30 janvier 2013 à 22:26:14

C'est une fonction utilisée en déboggage, tu peux trouver plein d'informations sur la page de la documentation à son sujet.

Globalement, elle affiche le contenu et le type d'une variable. :)

30 janvier 2013 à 22:29:36

D'accord d'accord, et puis encore merci ! :)
13 septembre 2014 à 10:28:33

Bonjour,

J'ai cherché longtemps comment je peut extraire les données automatiquement en grande quantité à partir d'un site web. J'ai trouvé un service qui m'a beaucoup aidé, et rapidement. Je partage le lien: http://affairesoft.com/extraction-collecte-donnees/


Bon chance
4 novembre 2015 à 15:10:53

Bonjour,

Pour une utilisation professionnelle, je suis à la recherche d'un protocole, d'un module, appelez ça comme vous voudrez, permettant d'extraire des données (références et prix) sur un site internet.

J'ai bien compris ce que vous expliquez plus haut, cependant, étant totalement novice dans le php, je me demande comment faire pour utiliser le code que vous avez proposé plus haut.

8 avril 2016 à 8:14:59

bonjour à tous(tes). j'ai bien lu tout vos messages et une chose me saute aux yeux tant j'ai mal aux cheveux, c'est que si rob53150 se dit 'novice' en programmation, moi je suis 'docteur en gogolitude'!!! (et avec mention!!!)

je cherche également un logiciel (facile d'utilisation vu la petitesse de mon cerveau) qui me permettrai d'extraire (automatiquement) des données voulues sur différents sites web afin de réaliser mes propres calculs.

quelqu'un peut il m'en indiquer un correspondant à mes attentes s.v.p.?

par avance merci. (ne serait ce que pour le temps consacré à ces quelques lignes)

-
Edité par JeanFrançoisPeyou 8 avril 2016 à 8:25:10

5 juillet 2016 à 11:17:14

comment se fait le fonctionnement et l'anayse des données recuperées d'un site e-commerce.

qui peut me donner un exemple

-
Edité par ouabel 5 juillet 2016 à 11:20:28

20 juillet 2016 à 8:55:42

Pour les questions créer vous des nouveaux topics, (et profitez-en pour lire les règles du forum, le détérrage est interdit ;) )

Extraire des données d'un site internet

× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
  • Editeur
  • Markdown