comment puis je récupérer le contenu d'un site web (e-commerce) avec curl
comment puis je récupérer le contenu d'un site web (e-commerce) avec curl
Sans curl avec file_get_contents() par exemple.
N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP
j'ai essayer ce code mais ca ne fonctionne pas pourriez vous m'aider merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 <?php //La page qu'on veut utiliser $wikipediaURL = 'http://www.rebuy.fr/vendre/mobile/'; //On initialise cURL $ch = curl_init(); //On lui transmet la variable qui contient l'URL curl_setopt($ch, CURLOPT_URL, $rebuyURL); //On lui demdande de nous retourner la page curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //On exécute notre requête et met le résultat dans une variable $resultat = curl_exec($ch); //On ferme la connexion cURL curl_close($ch); //On crée un nouveau document DOMDocument $rebuyPage = new DOMDocument(); //On y charge le contenu qu'on a récupéré avec cURL $rebuyPage->loadHTML($resultat); //On parcourt les balises <div> foreach($rebuyPage->getElementsByTagName('div') as $div){ //Si l'id de la page est bodyContent if($div->getAttribute('id') == <bodyContent>){ //On met le contenu du premier <p> dans une variable $premierP = trim($div->getElementsByTagName('p')->item(0)->nodeValue); //Si le premier <p> est vide ou ne contient pas du texte while($premierP == '<br>' || $premierP == '<br />' || $premierP == ''){ //On le supprime $div->removeChild($div->getElementsByTagName('p')->item(0)); //Et on passe au <p> suivant $premierP = trim($div->getElementsByTagName('p')->item(0)->nodeValue); }; //Un try pour éviter les messages d'erreur try{ //On parcourt toutes les tables foreach( $div->getElementsByTagName('table') as $table ){ //Et on les supprime $div->removeChild($table); } } catch(Exception $e){ } //On récupère le contenu de la fameuse balise <p> dans une variable $description = '<p>' . $div->getElementsByTagName('p')->item(0)->nodeValue. '</p>'; } } //On affiche de résultat echo $description; ?>
En fait non. Dans la théorie, ca marche aussi bien.
Dans la pratique, une requête avec file_get_contents n'envoie pas certains headers (ex : l'user-agent) et ne gère pas les cookies; ca pose problème sur certains site, et au final mieux vaut utiliser curl ou guzzle, plutot que de rajouter des fonctionnalités manquantes à file_get_contents().
Par ex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 <?php $test = file_get_contents(str_replace('-','r','http://www.ca--efou-.f-/')); // remplacer - par r echo htmlentities($test); // ne donne pas le résultat attenduca ne fonctionne pas
Affiche les erreurs, tu verras ce genre de problème en 30 secondes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 $wikipediaURL = 'http://www.rebuy.fr/vendre/mobile/'; //On initialise cURL $ch = curl_init(); //On lui transmet la variable qui contient l'URL curl_setopt($ch, CURLOPT_URL, $rebuyURL); // $wikipediaURL ou $rebuyURL ? ... if($div->getAttribute('id') == <bodyContent>){ // manque des '
Merci pour votre réponse
je ne vois pas ou ca manque le (')
if($div->getAttribute('id') == <bodyContent>){
En gros tu parcours tous les <div> pour trouver <div id="bodyContent">. Dans ton code bodyContent est sensé être une chaîne de caractères, donc il faut des apostrophes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 foreach($rebuyPage->getElementsByTagName('div') as $div){ //Si l'id de la page est bodyContent if($div->getAttribute('id') == <bodyContent>){
Le code que tu as trouvé pour extraire les infos d'une page web est assez moche. Regarde plutot du coté de xpath/xquery.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 //Si l'id de la div (pas de la page) est bodyContent if($div->getAttribute('id') == 'bodyContent'>){ // ca marchera mieux; ou pas, vu que dans le code source de la page que tu récupère il n'y a pas bodycontent.
j'ai essayé avec ce code mais ,ca ne marche pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 <?php // Initialiser cURL $curl = curl_init(); // Définir l'adresse à ouvrir curl_setopt($curl, CURLOPT_URL, "https://www.reBuy.fr/vendre/"); // Suivre les redirections s'il y en a @curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); // Exécuter $result = curl_exec($curl); // Fermer pour libérer des ressources systèmes curl_close($curl); // Afficher le code source de la page echo htmlentities($result); $id = 1001 ; while ($id <20000) { $adresse = "https://www.reBuy.fr/vendre/detail_ese.asp?ID=$id" ; // adresse de la page à exploiter $page = @file_get_contents ($adresse); // récupérer le contenu de la page echo "$page <br>"; // affiche la page $id++ ; // $id = $id + 1 } ?> [/php] [php] <?php $id = 135 ; while ($id < 20000) { $adresse = "https://www.reBuy.fr/vendre//detail_ese.asp?ID=$id" ; // adresse de la page à exploiter $page = @file_get_contents ($adresse); // récupérer le contenu de la page echo "$page <br>"; // affiche la page $id++ ; // $id = $id + 1 } ?>
"ca ne marche pas" c'est un peu vague quand même.
Ce code fonctionne que sur le site d'exemple, mais quand j'essaye de l'adapter pour le site désiré ca ne marche pas
Ca risque pas de marcher; ton code essaye de télécharger plusieurs milliers de page d'un coup. Essaye déjà d'en télécharger une seule.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager