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

Langage PHP Discussion :

Parsing d'un code HTML


Sujet :

Langage PHP

  1. #1
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut Parsing d'un code HTML
    Bonjour,

    J'ai essayé de parser un site dont vous trouverez une partie de la structure dans l'image suivante:

    Nom : parsing.png
Affichages : 190
Taille : 49,5 Ko

    Remarque: Sous chaque balise <div> qui a une classe (.cameraSlide cameraSlide), j'ai une balise <img>.

    je suis novice avec le PHP, et j'ai essayé avec la bibliothèque "simple_html_dom.php" comme suivant:

    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
     
    <?php 
    require_once "simple_html_dom.php";
     
    $html = new simple_html_dom();
    $html->load_file("http://www.css.org.tn/accueil?view=featured");
     
     
    // Instance de la class DomDocument
    $doc = new DOMDocument();
     
    // Definition de la version et l'encodage
    $doc->version = '1.0';
    $doc->encoding = 'ISO-8859-1';
     
    $comment_elt = $doc->createComment('Team Office');
    $doc->appendChild($comment_elt);
     
    foreach($html->find('.cameraSlide cameraSlide_0') as $article){
     
     
    $note_elt = $doc->createElement('article');
    $doc->appendChild($note_elt);
     
    $image    = $doc->createElement('image', $article->find('img',0)->src);
     
     
    $body_elt = $doc->createElement('body');
     
    $note_elt->appendChild($image);
     
    // Creation d'une section CDATA
    $body_cdata_elt = $doc->createCDATASection('N\'oublie pas tes talonnettes');
     
    // Placement de cette section entre les balises <body> et </body>
    $body_elt->appendChild($body_cdata_elt);
     
    }
    // Rendre Joli ;)
    $doc->formatOutput = true;
     
    // Afficher le document XML
    echo $doc->saveXML();
     
    // Sauver le document XML sous le nom simple.xml
    $doc->save('simple.xml');
     
    // Yeah on a fini!   
     
    ?>
     
    </body>
    mais je reçois une page blanche comme affichage

    Est ce que vous pouvez me dire c'est quoi l'erreur.

    Cordialement

  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
    Dans la page que tu "load" il n'y a pas "cameraSlide".
    Bon utilise Domdocument ou simple_html_dom mais les deux.
    Et tu essaies de faire quoi exactement avec ces appendChild et createElement ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Bonjour,

    Dans la page que tu "load" il n'y a pas "cameraSlide".
    En effet il y a plutôt .cameraSlide cameraSlide_0.

    Bon utilise Domdocument ou simple_html_dom mais les deux
    Vous avez raison, mais je suis novice en PHP C'est quoi la différence? car j'ai trouvé un tuto sur internet.

  4. #4
    Membre actif
    Avatar de Micmaya
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 131
    Points : 202
    Points
    202
    Billets dans le blog
    3
    Par défaut
    Bonjour,

    Domdocument est le parseur natif de PHP et simple_html_dom est un parser externe qui utilise une syntaxe semblable à jQuery pour sélectionner les noeuds.

    Bref, ils ont tous les deux le même rôle alors il suffit d'en choisir un, c'est un peu "stupide" d'utiliser les deux !

    Bien à toi,
    Pensez à mettre comme si c'est le cas !

  5. #5
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Merci à vous!

    J'ai essayé de rectifié mon code de cette façon:

    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
    <body>
    <?php 
    require_once "simple_html_dom.php";
     
    $html = new simple_html_dom();
    $html->load_file("http://www.css.org.tn/accueil");
     
    $link = $html->find('.camera_src camerastarted div');
     
    foreach ($link as $ligne) 
    { 
    echo '--'.$ligne;
    } 
     
    //echo $buff;
    //echo $link['data-src'];
    $href = $link->getAttribute('data-src');
     
    echo $href;
    Voici la partie HTML que je voulais parser:

    Nom : pbparsing.png
Affichages : 190
Taille : 28,9 Ko

    Mais lors de l’exécution, rien ne s'affiche a part ceci:

    Fatal error: Call to a member function getAttribute() on a non-object in C:\wamp\www\CSSParser\index2.php on line 24
    qui est relatif à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $href = $link->getAttribute('data-src');

  6. #6
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Il y a une autre chose, quand j'ai consulté la structure du site (en utilisant l'inspecteur d'éléments), j'ai trouvé dans l'attribut src que les images sont stockés dans un dossier images... Alors je me pose la question comment pourrais-je les extraire(/parser) sans avoir une visibilité sur le chemin absolue?

    Cordialement.

  7. #7
    Membre actif
    Avatar de Micmaya
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 131
    Points : 202
    Points
    202
    Billets dans le blog
    3
    Par défaut
    Pourquoi as-tu sortis cette ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $href = $link->getAttribute('data-src');
    du foreach ??

    Pour moi tu devrais avoir quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    
    $link = $html->find('.camera_src camerastarted div');
    foreach ($link as $ligne) 
    { 
      echo '-- ' . $ligne->getAttribute('data-src') . '<br />';
    }
    Pour la question du chemin absolu, tu peux faire ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    echo realpath('/chemin/super/long/image.jpg'); // long/image.jpg
    
    // ou
    
    echo basename('/chemin/super/long/image.jpg');  // image.jpg
    Pensez à mettre comme si c'est le cas !

  8. #8
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Bonsoir,

    Tout d'abord merci pour votre réponse.

    J'ai testé avec votre code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $link = $html->find('.camera_src camerastarted div');
    foreach ($link as $ligne) 
    { 
      echo '-- ' . $ligne->getAttribute('data-src') . '<br />';
    }
    malheureusement ça n'affiche rien (une page blanche)

  9. #9
    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
    Le problème est toujours le même depuis le début : regarde le code source direct de la page accueil.php, il ne contient pas les éléments que tu cherches.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  10. #10
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    En se référant à cette image, je pense que j'ai mis la bonne syntaxe (y compris les balises)




    http://postimg.org/image/nad07si7f/


    Ma requête est simple, c'est de pouvoir récupérer le contenu de l'attribut data-src .

    Cordialement

  11. #11
    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
    $link = $html->find('.camera_src camerastarted div');
    Non. Là ça recherche <nimportequellebalise class="camera_src"><camerastarted><div> ....

    print_r($link) doit pas raconter grand chose. Essaye sans camerastarted ...

  12. #12
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Non. Là ça recherche <nimportequellebalise class="camera_src"><camerastarted><div> ....

    print_r($link) doit pas raconter grand chose. Essaye sans camerastarted ...
    J'ai enlevé le camerastarted mais rien ne s'affiche... j'ai testé avec le mais j'ai eu comme résultat.

  13. #13
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Bonsoir,

    J'ai pensé à remplacer l'espace dans .camera_src camerastarted en utilisant ctype_space mais en vain...

  14. #14
    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
    Et avec div[data-src] ?

  15. #15
    Débutant  
    Inscrit en
    Mai 2006
    Messages
    705
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 705
    Points : 117
    Points
    117
    Par défaut
    Merci beaucoup ça marche!

Discussions similaires

  1. Parsing de code HTML
    Par katcha95 dans le forum Bibliothèque standard
    Réponses: 0
    Dernier message: 25/10/2009, 15h49
  2. Problème d'exécution de code HTML (parse error)
    Par dimitri13 dans le forum Langage
    Réponses: 6
    Dernier message: 30/09/2009, 16h53
  3. Parse code HTML avec PHP
    Par naourass dans le forum Langage
    Réponses: 3
    Dernier message: 19/05/2006, 08h12
  4. [RegEx] Parsing complexe de code HTML
    Par choas dans le forum Langage
    Réponses: 4
    Dernier message: 14/03/2006, 11h41
  5. composant builder4 pour afficher du code html
    Par BranRuz dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/09/2002, 11h35

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