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 :

Parser du HTML


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club Avatar de chatofor
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Points : 25
    Points
    25
    Par défaut Parser du HTML
    Bonjour,

    J'aimerais coder un site qui donne des statistiques concernant un forum que j'aime bien fréquenter. Par exemple pour un sujet donné, on saurait qui est la personne qui a posté le plus de messages, combien etc. C'est plus pour apprendre le PHP qu'autre chose.

    Pour l'instant j'ai ce code :

    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
    <?php
    require 'flight/Flight.php';
     
    Flight::route('/', function(){
     
     
    $ch = curl_init();
    $timeout = 0; // set to zero for no timeout
    curl_setopt ($ch, CURLOPT_URL, 'http://m.jeuxvideo.com/forums/42-51-60392683-1-0-1-0-la-flemme-est-genetique.htm#post_983955211');
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
    $file_contents = curl_exec($ch);
    curl_close($ch);
     
     
    $dom = new DOMDocument;
    libxml_use_internal_errors(true);
    $dom->loadHTML($file_contents);
     
    $xpath = new DOMXPath($dom);
    $domExemple = $xpath->query("//div[@class='post']");
    $date = $xpath->query("//div[@class='date-post']");
     
    $result = [];
     
     
     
    $i = 0;
    foreach ($domExemple as $exemple) {
     
    foreach($date as $datepost){
        $result[$i++] = ltrim($exemple->nodeValue);
    	$result[$i++][$i] = $datepost->nodeValue;
    }
     
    }
     
    ?><pre><?php
     
    print_r($result);?></pre><?php
     
    });
     
    Flight::start();
    Ce que j'aimerais, c'est pour chaque message, le consigner dans un tableau qui contiendrait plusieurs clefs : auteur, date et message.

    Seulement avec le code que j'ai, je patagauge, je vois pas du tout comment m'y prendre.

    Quelqu'un aurait il la gentillesse de me donner un coup de main pour me mettre sur une piste ?

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Pour moi tout va bien jusqu'à la ligne 21 (mis à part le nom de variable choisit qu'on va maintenant appeler $posts.

    Donc $posts contient un liste de nœuds avec chaque post. Il suffit ensuite de boucler sur cette liste en utilisant chaque item comme point de départ de tes requêtes XPath (le deuxième paramètre de la méthode DOMXPath::evaluate) afin d'obtenir ce que tu souhaites. Donc quelque chose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $result = [];
     
    foreach($posts as $post) {
     
        $result[] = [
            'author' => $xpath->evaluate('blah blah blah', $post),
            'date' => $xpath->evaluate('blah blah blah', $post),
            'message' => $xpath->evaluate('blah blah blah', $post)
        ];
    }
    Tu n'as plus qu'à décrire le chemin en partant du nœud post jusqu'à l'information et à t'arranger pour que DOMXPath::evaluate renvoie une chaîne.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Nouveau membre du Club Avatar de chatofor
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Salut,

    Ecoute je suis même allé sur la doc et chercher des exemples mais je ne comprends pas du tout ce que tu essaies de faire.

    Il y a un div qui a la classe "date-post" et qui contient la date du post, est-ce que tu pourrais me donner un exemple avec ?

    Merci

    edit :

    J'ai essayé ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach($posts as $post) {
     
     
     
     
        $result[] = [
            'author' =>  $xpath->evaluate("string(//div[@class='who-post'])", $post),
            'date' => $xpath->evaluate("string(//div[@class='date-post'])", $post),
            'message' => $xpath->evaluate("string(//div[@class='contenu'])", $post)
        ];
    }
    Ca me donne :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    Array
    (
        [0] => Array
            (
                [author] => 
     
                                risikiki
     
     
                [date] => 
                        27 juillet 2019 à 17:46:26
     
                [message] => 
     
                                        https://www.huffingtonpost.fr/2013/04/10/flemme-question-genetique-selon-etude-americaine_n_3053828.html
     
     
                    Lire la suite >
     
     
            )
     
        [1] => Array
            (
                [author] => 
     
                                risikiki
     
     
                [date] => 
                        27 juillet 2019 à 17:46:26
     
                [message] => 
     
                                        https://www.huffingtonpost.fr/2013/04/10/flemme-question-genetique-selon-etude-americaine_n_3053828.html
     
     
                    Lire la suite >
     
     
            )
     
        [2] => Array
            (
                [author] => 
     
                                risikiki
     
     
                [date] => 
                        27 juillet 2019 à 17:46:26
     
                [message] => 
     
                                        https://www.huffingtonpost.fr/2013/04/10/flemme-question-genetique-selon-etude-americaine_n_3053828.html
     
     
                    Lire la suite >
     
     
            )
     
        [3] => Array
            (
                [author] => 
     
                                risikiki
     
     
                [date] => 
                        27 juillet 2019 à 17:46:26
     
                [message] => 
     
                                        https://www.huffingtonpost.fr/2013/04/10/flemme-question-genetique-selon-etude-americaine_n_3053828.html
     
     
                    Lire la suite >
     
     
            )
     
        [4] => Array
            (
                [author] => 
     
                                risikiki
     
     
                [date] => 
                        27 juillet 2019 à 17:46:26
     
                [message] => 
     
                                        https://www.huffingtonpost.fr/2013/04/10/flemme-question-genetique-selon-etude-americaine_n_3053828.html
     
     
                    Lire la suite >
     
     
            )
     
    )
    Ca boucle sur le même message ?

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xpath->evaluate("string(//div[@class='date-post'])", $post)
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Nouveau membre du Club Avatar de chatofor
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Merci, ça semble fonctionner sauf que ça boucle sur le même post à chaque fois, tu comprends pourquoi ?

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Oui, il faut partir du point d'origine dans ta requête XPath:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string(.//div[@class='date-post'])
    Sans quoi, le chemin part de la racine du site.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Nouveau membre du Club Avatar de chatofor
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    Merci CosmoKnacki, mais dis moi est-ce que tu peux me conseiller une saine lecture sur le sujet car je t'avoue que je suis largué...
    Moi je veux parser du HTML et je ne trouve que des articles sur le XML

  8. #8
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Moi je veux parser du HTML et je ne trouve que des articles sur le XML
    Ce qui est en soit est la même chose
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Le fait que les articles parlent d'XML et pas d'html n'est pas un problème, en ce qui concerne les classes DOMBidule, ça s'utilise exactement de la même manière (mises à part les méthodes de chargement et d'enregistrement de DOMDocument). Armé d'un tutoriel XPath et du manuel PHP ont peu déjà faire pas mal de choses.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  10. #10
    Nouveau membre du Club Avatar de chatofor
    Profil pro
    Inscrit en
    Août 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 59
    Points : 25
    Points
    25
    Par défaut
    D'accord, c'est pas vraiment clair pour moi j'ai du mal à comprendre, je vais lire des tutoriels sur XPath et XML. Merci pour l'aide !

Discussions similaires

  1. [HTML] parser du HTML
    Par defdef dans le forum Web
    Réponses: 1
    Dernier message: 07/04/2007, 18h01
  2. [RegEx] Parser tableau html
    Par php_de_travers dans le forum Langage
    Réponses: 5
    Dernier message: 29/11/2006, 07h50
  3. [PHP-JS] Parser le HTML avant son envoi
    Par oamram dans le forum Langage
    Réponses: 3
    Dernier message: 21/11/2006, 11h22
  4. [Tableaux] Besoin d'aide pour parser du HTML
    Par vallica dans le forum Langage
    Réponses: 2
    Dernier message: 08/10/2006, 22h12
  5. [Html] HTMLPARSER pour parser du html en Java
    Par alexthomas dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 01/09/2005, 21h11

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