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

C Discussion :

Récupérer tous les liens d'une page html


Sujet :

C

  1. #21
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Le monde C n'est pas le monde PHP, et de base, il n'y a pas 33000 fonctions pour faire tout et n'importe quoi....

    (Question: pourquoi ne pas le faire en PHP, vu que tu sembles t'y connaître ?)

    Le défit est la pour toi :p, enfin tu devrais trouver ton bonheur en tout cas !

  2. #22
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Hello !
    Ouui en php j'my connais bien mais le but c'est de le faire en C car php n'est pas tres rapide et ne tien que 30 secondes sinon il fait une erreur.
    Mon but est de faire un bot qui indexe plein de liens et qui prend leur contenu et tout pour faire un moteur de recherche !
    J'lai deja fait en php maintenant mn objectif c'est de le faire en C
    Voila je regarde le défi a +++

  3. #23
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par lapras123
    en php j'my connais bien [...] php [...] ne tien que 30 secondes sinon il fait une erreur.
    Ah bon ?

    J'lai deja fait en php
    Quelle(s) expression(s) régulière(s) utilisais-tu avec preg_match_all() quand tu l'as fait en PHP ? (n'oublie pas les balises [code] quand tu mettras les expressions utilisées ici)
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  4. #24
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 729
    Points
    1 729
    Par défaut
    Si c'est une application transitoire, ne le fait pas en C, continue de faire du PHP. Pour ton probleme de timeout : http://fr.php.net/manual/fr/function.set-time-limit.php

    Edit : merde, ça m'apprendra à pas tout lire.

  5. #25
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?
    $chaine = file_get_contents("http://www.myefarm.com");
     
    $motif='#<a href="(.*?)"(.*?)>#is';
     
    $nb=preg_match_all($motif,$chaine,$out,PREG_PATTERN_ORDER);
    echo''.$nb.' liens ! <br/>';
    foreach ($out[1] as $link) {
    echo "$link<br />";
    }
    ?>
    Voila la t'as tous les liens :p

  6. #26
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par lapras123
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?
    $chaine = file_get_contents("http://www.myefarm.com");
     
    $motif='#<a href="(.*?)"(.*?)>#is';
     
    $nb=preg_match_all($motif,$chaine,$out,PREG_PATTERN_ORDER);
    echo''.$nb.' liens ! <br/>';
    foreach ($out[1] as $link) {
    echo "$link<br />";
    }
    ?>
    Voila la t'as tous les liens :p
    Même ceux là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <a name="x" href="http://boogie.tld">
    <a href=http://google.com>
    <a
     href="http://developpez.net"
    >
    ?


    Et puis il me semble qu'il y a un risque d'en récupérer plus qu'il n'en faut :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <!-- <a href="http://entrop1"> -->
    <script>var x='<a href="http://entrop2">';</script>
    Une autre limitation : la taille de la page à traiter (puisque tu la charges entièrement en mémoire).


    Mais si tu veux faire le même genre de choses en C, tu peux essayer les fonctions regex POSIX.
    Sous Windows avec Dev-C++, tu peux utiliser la bibliothèque Rx (les fonctions sont les mêmes, seul le nom du fichier d'entête change).
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  7. #27
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Pour les "" du href ou des '' ou rien du tout 'ai juste a changé l'eexpression :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $motif='#<a href=(.*?)(.*?)>#is';
    Et faire un preg_replace('"', '', $link);
    et preg_replace("'", '', $link);

    Sinon pour récupérer tous les liens de la page meme avec <a name je pense changer l'expression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $motif='#href=(.*?)(.*?)>#is';

    moi je fais une vérification d'url (si l'url existe)pour chaque lien comme ca y'aura pas de faux liens (genre si qqun a comme pseudo : href="idiot"):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $contenu=file_gets_contents($url);
    if(!empty($contenu)) {
    //le lien est valide
    }

    Bien sur y'a plein de solution mais j'avoue que mon systeme est LOIN d'être parfait et peut etre trop long avec ma vérification d'url....

    La j'ai vraiment laché des petites solutions vites faites mais en y réfléchissant un peu je pense que je peux faire mieux

    Sinon j'ai pas compri pk je charge tout dans la mémoire ?!


    Pour les bibliothèque je vais les regarder merci bcp !!
    ++
    Si tu veux ensemble on peut trouver la meilleur solution pour le php !

  8. #28
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2003
    Messages
    878
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 878
    Points : 1 067
    Points
    1 067
    Par défaut
    Citation Envoyé par lapras123
    Sinon j'ai pas compri pk je charge tout dans la mémoire ?!
    Tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $contenu=file_gets_contents($url);
    Donc tu charges toute la page dans une variable.
    Une variable est stockée en mémoire.
    Donc tu charges toute la page en mémoire.
    En pratique, ce n'est peut-être pas un problème si tu ne traites qu'une page à la fois et si les pages ne sont pas grosses.
    Mais si les pages à traiter ont une taille importante et/ou si tu en traites plusieurs en parallèle, alors tu vas être vite limité (par la taille de la mémoire).
    Un problème bien exposé
    est, pour moitié, solutionné. / La connaissance s'accroît quand on la partage, pas quand on l'impose. / La violence est le langage des faibles.

  9. #29
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 24
    Points
    24
    Par défaut
    Je traite une page par execution de la page.
    les pages peuvent variées selon le site que j'explore :p
    Comment remédier a ce probleme ?

Discussions similaires

  1. Erreur, Parser : récupérer les liens d'une page html
    Par floflo_2006 dans le forum Général Java
    Réponses: 5
    Dernier message: 13/12/2006, 01h26
  2. [RegEx] Récupérer tous les liens d'une page
    Par micatmidog dans le forum Langage
    Réponses: 13
    Dernier message: 03/11/2006, 01h37
  3. [RegEx] récupérer tous les liens d'une page
    Par italiasky dans le forum Langage
    Réponses: 15
    Dernier message: 08/04/2006, 18h55
  4. Réponses: 7
    Dernier message: 14/09/2005, 10h50
  5. 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