IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Forum] Récupérer le contenu d'un site avec cURL


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut [Forum] Récupérer le contenu d'un site avec cURL
    comment puis je récupérer le contenu d'un site web (e-commerce) avec curl

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Sans curl avec file_get_contents() par exemple.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    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;
     
    ?>

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    Citation Envoyé par sabotage Voir le message
    Sans curl avec file_get_contents() par exemple.
    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 attendu
    ca ne fonctionne pas


    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 '
    Affiche les erreurs, tu verras ce genre de problème en 30 secondes.

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci pour votre réponse
    je ne vois pas ou ca manque le (')
    if($div->getAttribute('id') == <bodyContent>){

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    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>){
    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
     
    //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.
    Le code que tu as trouvé pour extraire les infos d'une page web est assez moche. Regarde plutot du coté de xpath/xquery.

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    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
    }
     
     
     ?>

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    "ca ne marche pas" c'est un peu vague quand même.

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    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

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    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.

Discussions similaires

  1. Récupérer le contenu d'une variable avec liste déroulante
    Par SteffieLili dans le forum QlikView
    Réponses: 8
    Dernier message: 19/05/2014, 18h56
  2. Réponses: 6
    Dernier message: 16/03/2014, 19h31
  3. Réponses: 2
    Dernier message: 11/01/2012, 00h28
  4. Réponses: 2
    Dernier message: 25/04/2009, 17h00
  5. Réponses: 2
    Dernier message: 04/02/2009, 13h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo