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 :

[Mail] Récupérer tous les liens et les titres d'une page


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 6
    Points
    6
    Par défaut [Mail] Récupérer tous les liens et les titres d'une page
    Bonjour à tous,

    J'aimerais récupérer tous les liens et leur titres de n'importe quelle page.

    Moi j’ai programmé 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
     < ?php
    $url = "http://www.example.com/";
     
    $fp = fopen ($url,"r"); //lecture da la page
     
    while (!feof($fp)) //parcours des lignes
    { 
        $page .= fgets($fp,4096); //lecture contenu ligne
    }
     
    preg_match_all('#<a href="(.*?)"(?:.*)>(.*?)</a>#', $page, $match, PREG_SET_ORDER);
     
    ?>
        <table border="1">
            <tr>
                <td><h3>Titre du lien</h3></td>
                <td><h3>Lien</h3></td>            
            </tr>
     
    <?php
            $i=0;
            foreach($match as $var)
            {
    ?>
                <tr>
                    <td><?php echo $var[2]; ?></td>
                    <td><?php echo $var[1]; ?></td>                
                </tr>
    <?php
                $i++;
     
            }
    ?>        
        </table>
    <?php
    echo "<h3>Il ya ".$i." résultats</h3><br>";
    ?>
    Mais cela n'affiche que les liens qui sont entre guillemet et leur titre. Et sur devélopper.com j’ai trouvé une expression régulière du genre #<a\s.*?(?(?<!\s)\s)href=(["'])?((?(1).*?|\S*))(?(1)\1).*?\>(.*?)</a>#is qui a été fait par loufoque. Mais dans mon programme ça fonctionne pas, il donne une erreur à cause de '.

    Pouvez-vous m’aider svp pour que ça affiche tous les liens de la page choisie avec leur titre ?

    Merci d'avance.

  2. #2
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    j'ai pas bien compris dans quel cas ta fonction ne marchait pas ?
    tu peux donner un exemple, et nous dire quels type de lien tu veux prendre ?

    sinon si tu échappes le ' avec un \ ca devrait le faire aussi !!

    ++

  3. #3
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('#<a href=["']?(.*?)["']?(.*)>(.*?)</a>#i', $page, $match, PREG_SET_ORDER);
    Et avec ça? Normalement ça récupère les liens <a href="#"></a> ou <a href=#></a> ou <a href='#'></a>

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Salut,

    Anduriel ça marche correctement ton expression j’ai testé sur le site de http://www.lumadis.be/regex/test_regex.php#pointeur_aff.Mail il y a un problème c’est que quand je mets dans mon code cette expression régulière il met en couleur ce qui reste entre les deux simple ‘ ‘ guillemet qui se trouve dans l’expression.
    Donc ça engendre une erreur disant que le ] non définit.
    j’ai essayé de mettre \ devant ‘ ça me donne les titres des liens soulignés et les liens mais les liens sont de la forme : contact.htm" class="menu" onMouseOver="MM_showHideLayers('menu1','','show')" onMouseOut="MM_showHideLayers('menu1','','hide')". je veux juste avoir contact.htm.

    Pour la question de Maxoo, je veux récupèrer tous les liens de la forme <a href="#">titre</a> ou <a href=#>titre</a> ou <a href='#'>titre</a> avec leur titre


    est-ce que vous avez d’autre idées ?

    Merci d’avance.

  5. #5
    Membre régulier
    Inscrit en
    Avril 2004
    Messages
    85
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2004
    Messages : 85
    Points : 89
    Points
    89
    Par défaut
    une page qui peut peut etre te rendre service:

    http://www.expreg.com/source.php

  6. #6
    Membre expérimenté
    Avatar de Anduriel
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Février 2004
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Février 2004
    Messages : 2 290
    Points : 1 500
    Points
    1 500
    Par défaut
    Mail il y a un problème c’est que quand je mets dans mon code cette expression régulière il met en couleur ce qui reste entre les deux simple ‘ ‘ guillemet qui se trouve dans l’expression.
    Donc ça engendre une erreur disant que le ] non définit.
    Tu peux réexpliquer ton problème j'ai pas compris?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Salut,
    je mets le code que j'ai développé, si tu fait copier coller sur ton éditeur de code
    tu verra le problème tout de suite sur preg_match_all('#<a href=["']?(.*?)["']?(.*)>(.*?)</a>#i', $page, $match, PREG_SET_ORDER); :
    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
     
    <html>
    <head>
    <title>Lire un source HTML</title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    </head>
    <body bgcolor="#FFFFFF" text="#000000">
    <h3 align="center"><i><b>Lire un source HTML</b></i> </h3>
    <form method="post" action="">
      <div align="center">URL 
        <input type="text" name="url">
        <input type="submit" name="lire" value="Lire">
      </div>
    </form>
    <hr width="70%" align="center">
    <?
    if (strlen($url)!=0) 
    {
     
    	echo "<h3 align=\"center\"><i>URL passée : $url</i></h3>";
        echo "<hr width=\"100%\" align=\"center\">";
     
        // Ajout de http:// si cela a été omis, substr() :Retourne un segment de chaîne
        if (substr($url,0,7)!='http://') 
        {
            $url='http://'.$url;
        }
     
        $fp = fopen ($url,"r"); //lecture da la page
     
        while (!feof($fp)) //parcours des lignes
    	{ 
    		$page .= fgets($fp,4096); //lecture contenu ligne
    	}
    	fclose($fp); 	//fermeture de la page	
     
    	preg_match_all('#<a\s.*?(?(?<!\s)\s)href=(["\'])?((?(1).*?|\S*))(?(1)\1).*?\>(.*?)</a>#is', $page, $match, PREG_SET_ORDER);
     
    	?>
    	<table border="1">
    		<tr>
    			<td><h3>Lien</h3></td>
    			<td><h3>Titre du lien</h3></td>
    			<td><h3>---------</h3></td>
    			<td><h3>Titre du lien</h3></td>
    		</tr>
     
    <?php
    			$i=0;
    			foreach($match as $var)
    			{
    ?>
    				<tr>
    				<td><?php echo $var[2]; ?></td>
    				<td><?php echo $var[0]; ?></td>
    				<td><?php echo $var[1]; ?></td>
    				<td><?php echo $var[3]; ?></td>
    				</tr>
    <?php				
    				$i++;
     
    			}
    ?>		
    	</table>
    <?php
    echo "<h3>Il ya ".$i." résultats</h3><br>";
    ?>
    Merci pour l'aide.

  8. #8
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    il marche pas ce code ? c'est sur le \' que ca bloque ?

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Il marche ce code mais quand j'enleve \ devant ' ça fait une erreur.

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Sinon j'ai une autre expression régulière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match_all('`<a href=[^>]+>(.+?)</a>`s', $page, $match,PREG_SET_ORDER);
    qui me donne les titres et puis les titres qui sont soulignés,mais ça me donne pas les liens.

  11. #11
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    Citation Envoyé par dragon noir
    Il marche ce code mais quand j'enleve \ devant ' ça fait une erreur.
    si il marche ou est le probleme ?

  12. #12
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Il marche mais il me donne pas le résultat que je veux. Moi, je veux avoir tous les liens et leur titres, c'est tout.

  13. #13
    Membre émérite

    Homme Profil pro
    Expert PHP
    Inscrit en
    Novembre 2004
    Messages
    2 127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Expert PHP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 127
    Points : 2 557
    Points
    2 557
    Par défaut
    et dans $match tu as pas ca ?

    je pige pas, tu dis que ca marche, ton preg_match_all.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/01/2015, 06h57
  2. Réponses: 2
    Dernier message: 21/06/2011, 12h06
  3. [REGEXP] Suppression de tous les liens et les spans dans un code HTML
    Par Jibees dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/11/2007, 10h24
  4. |VB6] Comment Lister les liens vers des fichiers d'une page web
    Par Mayti4 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 18/01/2005, 18h17

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