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 :

[Système] Extraire des données d'une page web


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Gérant
    Inscrit en
    Février 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Février 2006
    Messages : 262
    Points : 329
    Points
    329
    Par défaut [Système] Extraire des données d'une page web
    Bonjour,

    Je voudrais extraire toutes les adresses internet et les adresses email se trouvant sur une page web.

    Ce qui complique la chose, c'est que ça peut être n'importe quelle page web.

    En plus je ne veux récupérer parfois qu'une partie des adresses :
    - pour les URLs : www.domain.ext - domain.ext - sub.domain.ext

    Et je veux récupérer à part ce qui reste de l'adresse complète du style :
    /?var=var1...

    - pour les email : c'est plus simple address@domain.ext

    Sur mes pages ça fonctionne très bien, mais si je visite une page comme http://www.amazon.co.uk/ ou http://www.yahoo.co.uk/ ça devient vite très lourd à supprimer du code...

    J'ai quasiment tout essayé, mais il reste toujorus des parcelles de codes (image ou balises oubliées par le développeur etc...) parfois c'est même http qui ne veut plus s'enlever !!!

    Je mets des .co.uk en exemple, je n'ai jamais vu pire en codage même html.

    J'ai aussi une bizarerie, si je trouve une adresse https, ça n'affiche pas le lien (j'ai fait trouvé ça avec preg_match)

    Désolé je ne vous mets pas le code, je l'ai changé des dizaine de fois et du coup je ne sais même plus quelle version fonctionnait à peu près bien :-)

    Mais le dernier truc que j'ai essayé qui fonctionne à peu près correctement pour les adresses (mais avec mes problèmes du dessus) c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    preg_match_all("/(<([\w]+)[^>]*>)(.*)(<\/\\2>)/", $url, $matches, PREG_SET_ORDER);
     
    foreach ($matches as $val)
    {
       echo "val 0 : ".$val[0]."<br />\n";
       //echo "val 1 : ".$val[1]."<br />\n";
       //echo "val 2 : ".$val[2]."<br />\n";
       //echo "val 3 : ".$val[3]."<br />\n";
       //echo "val 4 : ".$val[4]."<br />\n";
       echo "<br />";
    }
    Voilà donc si vous avez une idée, je suis preneur :-)

    Merci à tous @ bientôt...

  2. #2
    Membre averti
    Homme Profil pro
    Gérant
    Inscrit en
    Février 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Février 2006
    Messages : 262
    Points : 329
    Points
    329
    Par défaut
    J'ai oublié de préciser, que les valeurs dans le preg_match_all... je n'y comprends rien !

    J'ai pompé ça sur sur le site de php après 2 jours d'essais, c'est celui que j'ai trouvé de plus approchant à mes objectifs...

    A bientôt...

  3. #3
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Bonsoir,

    Et dans quel but, veux tu extraire toutes ces adresses ???

    Sinon effectivement, le mieux c'est de se pencher sur preg_match_all mais cela est assez logn en tps d'execution.

    Salutations
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  4. #4
    Membre averti
    Homme Profil pro
    Gérant
    Inscrit en
    Février 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Février 2006
    Messages : 262
    Points : 329
    Points
    329
    Par défaut
    Bonjour,

    Pour les adresses mail, c'est au cas où un jour j'en ai besoin...

    Pour le reste des adresses, c'est à dire url, c'est pour faire un petit crawler...

    Donc j'ai besoin d'extraire les urls qui sont trouvées sur les pages visitées.

    A bientôt...

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    1 012
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 012
    Points : 1 093
    Points
    1 093
    Par défaut
    Citation Envoyé par FCYPBA
    Bonsoir,

    Et dans quel but, veux tu extraire toutes ces adresses ???
    +1

    Personnellement je n'aimerais pas
    Et d'ailleurs, cela ne devrait pas vraiment fonctionner car de plus en plus de site font un codage des adresses mails, justement pour éviter les SPAM qui nous font tous ch...

  6. #6
    Membre averti
    Homme Profil pro
    Gérant
    Inscrit en
    Février 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Février 2006
    Messages : 262
    Points : 329
    Points
    329
    Par défaut
    +1 avec toi Francis, je suis hébergeur et ça me pourris la vie !!!

    Je passe plus de temps à supprimer les mails qui ont réussis à passer les filtres que du support !

  7. #7
    Membre averti
    Homme Profil pro
    Gérant
    Inscrit en
    Février 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Février 2006
    Messages : 262
    Points : 329
    Points
    329
    Par défaut
    Bonjour,

    Je viens aux nouvelles voir si quelqu'un à une idée pour extraire les urls dans des pages web...

    A bientôt...

  8. #8
    NoT
    NoT est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Février 2004
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 237
    Points : 280
    Points
    280
    Par défaut
    Bon, pour etre tout à fait franc avec toi :

    1) Tu n'as pas les connaissances nécessaire pour faire ce que tu souhaites, tu te contentes de copier / coller du code...donc tout ce qu'on pourrait t'apporter n'aurait aucune vertue pédagogique, hors c'est le but de ce forum je crois.

    2) Tes intentions ne semblent pas bien clair et/ou légales.

  9. #9
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Sans être aussi violent que mes collègues, je n'adhère pas à l'idée de t'aider à récupérer tous les liens, surtout dans le cas des adresses e-mail.
    Si tu veux faire du traitement de masse d'e-mails, sache que le spam (=envoi de courrier électronique non sollicité) est interdit par la loi.
    Si tu veux faire du traitement de masse d'URLs, libre à toi mais sache qu'il y a déjà eu des procès pour utilisation frauduleuse/abusive de ressources informatiques (et que le plaintif a gagné).

  10. #10
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    Salut,
    j'ai moi aussi quelque doutes à propos de tes intention (surtout pour les adresses email) mais bon, rien ne nous permet de dire qu'elle sont effectivement mauvaises et puis, d'autres personnes peuvent se poser ce type de question pour de bonnes raisons.
    Je vais donc te donner une piste :
    moi, à ta place, je récupererais le contenu (code html) des pages avec un fopen(), puis j'explorerais le texte qu'elles contiennent avec des expressions régulieres. A toi de mettre au point les bonnes expressions, elles risquent d'être un peu complexes (mais pas trop) et puis je suis pas un pro dans ce domaine.
    Bon courage

  11. #11
    Membre éprouvé Avatar de macbook
    Inscrit en
    Février 2006
    Messages
    838
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 838
    Points : 1 009
    Points
    1 009
    Par défaut
    Suffit de récupérer tout ce qui se trouve dans les balises <a>. Surtout avec mailto:

    Mais bon le mec qui crypte pas ses email il est aussi coupable que les spammeurs. C'est de l'incitation. Et c'est aussi puni par la loi dans certain cas (pas celui-çi).
    Consultant idéaliste.

  12. #12
    Membre averti
    Homme Profil pro
    Gérant
    Inscrit en
    Février 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Février 2006
    Messages : 262
    Points : 329
    Points
    329
    Par défaut
    Bonjour,

    Vraiment dommage que certains pensent à mal...

    Je cherche juste à faire un spider, et je ne fais pas de copier/coller en général comme le pense NoT.

    Le projet est simple, je veux faire un moteur de recherche, style Google, sans pour autant concurrencer (ça ne servirait à rien), j'ai donc fait tout, la récupération des headers (où parfois se trouve des adresses emails !!!), le moteur de recherche en lui-même, la soumission manuelle, le système qui va rechercher les mises à jours des sites etc... bref tout le code pour PHP4 et PHP5...

    L'une des différences avec un moteur classique est que je ne veux enregistrer que les domaines et sous-domaines en excluant tout ce qui se trouve derrière... Ca ne m'amuse plus d'aller sur Google et d'aller jusqu'à la 100ème page pour trouver l'information que je cherche.

    Il ne me manque qu'une seule chose, le spider pour trouver de nouvelle urls directement sur les pages web, bref les fonctions d'un spider... Je pourrais utiliser les spiders existant, mais j'aime bien avoir mon propre code justement par soucis d'apprentissage et je ne suis pas très à l'aise avec les regex...

    D'ailleurs pour ce qui est des adresses emails, ça n'est plus un problème j'ai réussis avec tout mes essais à trouver la solution, mais reste mon problème des urls !!!

    Juste la piste pour les emails, je fait une recherche ligne par ligne avec file puis un preg_match (pour chaque ligne comportant un @) sur les mailto et les @ et puis traitement avant et après le @... mais là c'est plus facile étant donné qu'une adressse email est toujours de la même forme alors qu'une url comporte parfois des caractères ou n'en comporte pas comme par exemple un slash à la fin du domaine qui est parfois inexistant.

    Sinon pour le spam, comme je l'ai dis je suis hébergeur et ça me pourris la vie aussi, si je voulais spammer, pas besoin de récupérer des adresses emails, ça serait une perte de temps et de ressources sachant qu'on peut acheter des millions d'emails pour quelques dizaines d'euros... Il existe aussi des logiciels pour récupérer les adresses emails un peu partout, donc je ne perdrai pas mon temps à développer si le spam était l'objectif.

    De plus celui qui veut crypter ses mails facilement, il y a un moyen très simple avec le mailto il faut utiliser encode="javascript" ou faire une image à la volée ou mettre par exemple moi_at_domaine.ext !!!

    Le monde de l'open source à bien changé !!!

    En tout cas merci à ceux qui m'ont aidé comme Hervé et FCYPBA.

    Petite question tout de même sur la légalité à Kirkis :

    Si tu veux faire du traitement de masse d'URLs, libre à toi mais sache qu'il y a déjà eu des procès pour utilisation frauduleuse/abusive de ressources informatiques (et que le plaintif a gagné).
    Je n'ai jamais entendu parler de telle plainte, y a t-il à ce jour des sociétés utilisant les spider/crawler pour justement des moteurs de recherche qui ont eu des problèmes ?

    A bientôt... (peut-être)

    PS : une chose est certaine, je viendrais ici pour vous mettre le lien du moteur, histoire de faire baisser la paranoïa quant à mes intentions.

  13. #13
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Je le redis encore et toujours, la solution est dans le preg_match_all

    En regardant bien la doc et surout les notes, on voit une petite fonction qui coresspond tout a fait à ce que tu cherches

    Pierre
    Pierre
    1. Dans le manuel ( PHP, MySQL,..., rayez la mention inutile), tu te plongeras à deux fois plutôt qu'aucune.
    2. Dans la doc php, tu liras attentivement les sections Chaines de caractères, Tableaux et Système de fichiers
    3. Un code rapide c'est bien, un code maintenable c'est mieux
    ...

    Why was the font tag an orphan ? Because it didn't have a font-family.

  14. #14
    Membre éclairé Avatar de Hervé Saladin
    Homme Profil pro
    Ingénieur d'études en développement et déploiement d'applications
    Inscrit en
    Décembre 2004
    Messages
    647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur d'études en développement et déploiement d'applications
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 647
    Points : 799
    Points
    799
    Par défaut
    j'aime bien avoir mon propre code justement par soucis d'apprentissage et je ne suis pas très à l'aise avec les regex...
    Ben justement ! si tu veux apprendre, voici une excellente occasion !
    Et puis d'une ça te simplifierais beaucoup la tâche d'utiliser des expressions régulieres, de deux ca améliorerait certainement de façon conséquentes les performances de ton appli par rapport aux traitements que tu écris toi-meme (ce qui n'est pas du luxe pour un moteur d'indexation !), et de trois ca te servira surement plus tard d'avoir appris, c'est un truc qui peut s'averer tres utile quand on le maitrise

  15. #15
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Je fais une tentative toute simple, sans avoir consulté la doc comme proposé par FCYPBA :

  16. #16
    Membre averti
    Homme Profil pro
    Gérant
    Inscrit en
    Février 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Février 2006
    Messages : 262
    Points : 329
    Points
    329
    Par défaut
    Merci, je vais voir ce que donne tout ça et je vous tiens au courant...

    A bientôt...

  17. #17
    Membre averti
    Homme Profil pro
    Gérant
    Inscrit en
    Février 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Février 2006
    Messages : 262
    Points : 329
    Points
    329
    Par défaut
    Bonjour,

    Alors après avoir cherché au bons endroits suivant vos conseils, et pour ceux qui s'intéresse aux spiders comme moi, voici le code que j'ai fait, il peu bien sûr être amélioré, mais pour l'instant le résultat me satisfait...

    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
    $url = "http://www.yahoo.co.uk";
     
    function links($url)
    {
    	$html = @file_get_contents($url);
    	$reg0  ='`(src|href|url|content)=\"(http|https)://(.*)(/\")`';
    	@preg_match_all ($reg0, $html, $reg1);
     
    	$alpha = $reg1[0];
    	$count_alpha = @count($alpha);
    	//echo $count_alpha;
     
    	for ($a = 0; $a <= $count_alpha-1; $a++)
    	{
    		$exp0 = @explode('/', $alpha[$a]);
    		//echo $a." : ".$alpha[$a]."<br />";
     
    		$count_beta = @count($exp0);
    		//echo $count_beta;
     
    		for ($b = 0; $b <= $count_beta-1; $b++)
    		{
    			$exp1 = @explode('.', $exp0[$b]);
    			$count_gamma = @count($exp1);
    			//echo $count_gamma;
     
    			if ($count_gamma >= 2) { echo $a." : ".$exp0[$b]." (".$count_gamma.")<br />\n"; }
    		}
    	}
    }
     
    links($url);
    A bientôt et merci pour votre aide...

  18. #18
    Membre averti
    Homme Profil pro
    Gérant
    Inscrit en
    Février 2006
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : Dom-Tom

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Février 2006
    Messages : 262
    Points : 329
    Points
    329
    Par défaut
    Il ne faut pas recopier hein !

    Allez une petite note d'humour sur la fin ça ne fait pas de mal... sans rancune ...

    J'aurais peut-être réagis de la même manière que certain, j'en sais rien !

    A bientôt...

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

Discussions similaires

  1. Extraire des données d'une page web
    Par Meher001 dans le forum Général Dotnet
    Réponses: 14
    Dernier message: 07/03/2013, 16h13
  2. Extraire des données d'une page Web en VBA sous Excel
    Par BEMI dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 20/05/2009, 06h24
  3. [RegEx] Comment extraire des données d'une page HTML ?
    Par taliesin26 dans le forum Langage
    Réponses: 1
    Dernier message: 11/12/2006, 12h39
  4. [RegEx] Récupérer des données dans une page Web
    Par Pragmateek dans le forum Langage
    Réponses: 8
    Dernier message: 24/05/2006, 19h44
  5. Extraire des informations d'une page web
    Par lr dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 28/03/2006, 12h38

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