Récupérer les URLs et les Emails d'une page en PHP

Voici quelques lignes de codes, notamment composé d'expressions régulières vous permettant de récupérer toutes les adresses emails contenus dans une page ainsi que les liens qui la compose.

Dans un premier temps, prenons l'exemple ou l'on souhaite récupérer le contenu d'une page pour ensuite la traiter.

<?php
# Adresse du site à "exploiter"
$url = 'http://www.monsite.com';
 
# On récupère le contenu
$file = file_get_contents($url);

Désormais le contenu de la page est contenu dans notre variable "$file".

Adresses Emails
Grâce à une expression régulière nous avons la possibilité de récupérer dans un tableau toutes les adresses emails contenus dans notre variable.

<?php
# Récupération des emails
preg_match_all('`[a-zA-Z0-9_\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+`m', $file, $emails);
# Affichage du tableau
print_r($emails[0]);

Il se peut que la même adresse ressorte plusieurs fois dans votre tableau. Dans ce cas vous pouvez utiliser la fonction array_unique().

URLs
La méthode reste identique, à savoir lister toutes les balises "<a" et en récupérer le contenu de l'option "href".

<?php
# Récupération des URLs
preg_match_all('/<a[^>]+href="([^"]+)/i', $file, $urls);
# Affichage
print_r($urls[1]);

Il est aussi possible de récupérer des doublons en fonction des sites mais aussi des liens tronqués ou des morceau de code javascript. Pour cela vous pouvez par exemple tester si le site existe ou vérifier le format de l'adresse url toujours avec une expression régulière.

Billets relatifs

7 Commentaire(s)

  1. Commenté par Med le Tuesday 01 March à 19:22

    Trés intéressant comme astuce, j'avais chercher un truc de  ce genre pour récupérer le titre de la page grâce à un script qui lui récupère les FluxRSS..
    Je te remercie infiniment wink
    PS : je m'abonne a ton blog tongue trop sympa

  2. Commenté par Med le Tuesday 01 March à 19:55

    <?php
    print_r($emails[0]);

    et non :

    <?php
    print_r($emails[0];

  3. Réponse

    Merci bien c'est corrigé. wink

  4. Commenté par abercrombie paris le Friday 06 May à 13:37

    Du coup, c'est bon à savoir ça ! Merci

  5. Commenté par jeux par navigateur le Monday 09 January à 17:45

    Merci beaucoup pour ces bouts de code.

    Je n'ai trouver sur aucun site (et ça fait au moins une heure que je recherche) de solution pour récupérer les url et ton bout de code fonctionne.

    Merci

  6. Commenté par pcornil le Saturday 04 January à 18:26

    Bonjour,

    J'ai tester votre script mais j'ai comme réponse : Array ? pouvez vous m'aider ?
    Merci d'avance

  7. Réponse

    Bonjour,

    Désolé pour le retard, votre commentaire était perdu dans des milliers de spams... En effet le résultat est dans un tableau, pour voir le contenu de ce tableau utilisez la fonction var_dump ou print_r puis mettez en place une boucle pour passer les éléments un à un.

    N'hésitez pas si besoin !

  8. Commenté par CreaZo le Friday 22 August à 14:43

    Bonjour, cette astuce correspond bien à ce que je souhaite mais tout comme pcornil j'ai le même souci, c'est à dire que j'ai la réponse suivante :
    Array ( )

    J'essaye de faire une boucle comme expliqué dans ton commentaire précédent mais sans succès, peux tu détailler ton tuto un peu plus, afin d'arriver à afficher le résultat de notre tableau ?

    Merci à toi !

  9. Réponse

    D'après ton retour tu n'a récupéré aucun lien dans la page (ton tableau est vide)

    Vérifie bien le code source que tu récupère et si il contient bien des url et / ou email wink

  10. Commenté par CreaZo le Wednesday 27 August à 11:24

    Mon code source de la page définie dans mon code possede bien des mails

    Voila mon code :

    <?php
    # Adresse du site à "exploiter"
    $url = 'http://alveus.informationjeunesse.fr/Extern/WebContent/12953';   

    # Récupération des emails
    preg_match_all('`[a-zA-Z0-9_\.]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+`m', $file, $emails);
    # Affichage du tableau
    print_r($emails[0]);


    Mais ce qui m'étonne c'est que $file n'est pas définie avant et qu $url n'est pas réutilisé, je dois me tromper non ?

  11. Réponse

    En effet il te manque une ligne de code (avec la fonction file_get_contents) qui s'occupe de récupérer le contenu de la page.

    Par contre fait attention car ton url semble nécessiter une authentification pour y accéder ton ça complique ta situation wink

Ajouter un commentaire





Les commentaires sont validés manuellement afin d'éviter le spam.