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 :

Capturer les 3 premiers paragraphes d'une page HTML [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut Capturer les 3 premiers paragraphes d'une page HTML
    Bonjour à tous,

    Et bien tout est dans le titre : à l'aide de file_get_contents(), je parse une page html et je voudrais récupérer le texte contenu dans les 3 premiers paragraphes, c'est à dire entre <p> et </p>.

    J'ai bidouillé un truc avec preg_match_all, mais c'est pourri.
    Est-ce au moins la bonne fonction ?
    Merci de vos lumières.

  2. #2
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Non et tu devrais faire comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $doc = new DOMDocument;
    $doc->load('http://mon.site.com/ma/page');
     
    $list = $doc->getElementsByTagName('p');
    for ($i = 0; $i < 3; $i ++) {
      echo $list->item($i)->nodeValue;
    }
    On ne le répétera jamais assez: arrêtez de parser du HTML avec des Regexp !

  3. #3
    Membre éprouvé Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Par défaut
    Merci ! Je ne connaissais pas cette classe.
    Bonne soirée.

  4. #4
    Membre confirmé
    Homme Profil pro
    conception et traitement de documents xhtml
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : conception et traitement de documents xhtml
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    On ne le répétera jamais assez: arrêtez de parser du HTML avec des Regexp !
    Certes,

    Mais je bloque sur le simple besoin suivant :

    Je veux, si possible en simplexml ou en xpath, connaître le contenu du ième paragraphe d'un div que je ne connais que par son identificateur (je ne connais a priori pas sa place dans le fichier xhtml).

    Comment donc je peux sélectionner le paragraphe 3 ? (Pour l'instant, je contourne la difficulté en utilisant une regex.)

    <div id="Id_du_div">
    xxx<p>Paragraphe 1</p>
    xxx<p>Paragraphe 2</p>
    xxx<p>Paragraphe 3</p> <----
    xxx<p>Paragraphe 4</p>
    </div>

    Merci d'avance

  5. #5
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Citation Envoyé par Doc_xhtml Voir le message
    Comment donc je peux sélectionner le paragraphe 3 ? (Pour l'instant, je contourne la difficulté en utilisant une regex.)

    <div id="Id_du_div">
    xxx<p>Paragraphe 1</p>
    xxx<p>Paragraphe 2</p>
    xxx<p>Paragraphe 3</p> <----
    xxx<p>Paragraphe 4</p>
    </div>

    Merci d'avance
    Exactement de la même façon que cité plus haut. Tu réccupère une instance de DOMNodeList avec un XPAth ou DOMDocument::getElementsByTagName et tu peux accéder au node <n> avec DOMNodeList::item.

    Merci de lire la doc

  6. #6
    Membre confirmé
    Homme Profil pro
    conception et traitement de documents xhtml
    Inscrit en
    Août 2011
    Messages
    107
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : conception et traitement de documents xhtml
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2011
    Messages : 107
    Par défaut
    Merci de ta réponse, Benjamin

    Justement, si je pose la question, c'est que j'en ai pas explicitement trouvé la réponse dans la doc et que j'ai passé un temps plus que certain (une bonne partie de ce week-end) à essayer de comprendre pourquoi je récupérais des messages de type « Undefined property » ou «Trying to get property of non-object », alors que je m'inspirais au plus près possible des exemples donnés dans les docs et que j'avais l'impression d'avoir bien compris le principe.
    Dans les docs, c'est toujours plus simple...

    J'ai donc provisoirement abandonné et ai conservé mes regex.


    J'ai cependant essayé de nouveau en me basant sur tes indications :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $doc = new DomDocument();
    $doc -> loadHTMLFile($input_file_name);
    $essai = $doc -> getElementByID('Main_parameters') -> getElementsByTagName('p') -> item(0) -> nodeValue;
    J'obtiens bien le contenu du p. Merci !

    Attention : item(0) et non item[0] ; si j'utilise les [] j'obtiens pour la ligne $essai = les deux messages suivants :
    Notice: Undefined property: DOMNodeList::$item in
    Notice: Trying to get property of non-object in
    (Je me mélange un peu les pinceaux entre la syntaxe de xpath et celle de dom.)


    Maintenant, je vais (ré)essayer d'écrire la même expression en simplexml, d'une part, et en xpath, d'autre part. Pouvez-vous m'apporter quelques indications ? Merci d'avance

  7. #7
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    SimpleXML je pratique peu (je ne l'ai utilisé qu'une fois pour le coupler avec des RecursiveTreeIterator, ce qui est 'achement pratique car les classes DOM ne sont ni itérables ni traversables la plupart du temps).

    Pour comprendre la syntaxe des XPath tu peux regarder les Cours XPath

    Pour comprends comment utiliser les XPath en PHP, je te renvoie à la doc: http://php.net/manual/en/class.domxpath.php

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 02/11/2005, 14h16
  2. Réponses: 7
    Dernier message: 14/09/2005, 10h50
  3. Extraire les n premiers termes d'une chaine
    Par knecmotet dans le forum C++
    Réponses: 4
    Dernier message: 03/03/2005, 15h05
  4. réinitialiser les liens d'une page html
    Par sisco dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 05/11/2004, 16h03

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