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 :

Récupérer un ou plusieurs liens


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    266
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 266
    Points : 135
    Points
    135
    Par défaut Récupérer un ou plusieurs liens
    Bonjour à tous,

    Je souhaiterais récupérer tous les liens d'une page html qui commence par http://plantoburo.com/.

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de kolodz
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2008
    Messages
    2 211
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 211
    Points : 8 318
    Points
    8 318
    Billets dans le blog
    52
    Par défaut
    Il faut savoir dans quoi tu recherche cette information pour savoir la délimitation de fin.

    En effet si tu recherche dans du code HTML, tu aura :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="http://plantoburo.com/home">Lien</a>
    Et donc, il faudra prendre en compte le ". Alors que si tu cherche dans du texte en dur, cela ne sera pas nécessaire.

    Enfin en regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http\:\/\/plantoburo\.com.*
    Initiation aux expressions régulières en PHP

    Cordialement,
    Patrick Kolodziejczyk.
    Si une réponse vous a été utile pensez à
    Si vous avez eu la réponse à votre question, marquez votre discussion
    Pensez aux FAQs et aux tutoriels et cours.

  3. #3
    Membre actif Avatar de zaza576
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2013
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Août 2013
    Messages : 175
    Points : 275
    Points
    275
    Par défaut
    Hello,

    si tu veux grabber les liens d'un site web, tu as plusieurs possibilités.

    Je te conseille :
    - AAA) soit de passer par CURL pour télécharger ta page web, récupérer le contenu HTML, et ... récursivement, récupérer les liens de ta page via un preg-match-all (http://php.net/manual/fr/function.preg-match-all.php) sur tous les liens démarrant par http://plantoburo.com/ (startsWith($link, 'http://plantoburo.com/'); )

    function startsWith($haystack, $needle) {
    return $needle === "" || strrpos($haystack, $needle, -strlen($haystack)) !== FALSE;
    }

    Suite à cela, enregistrer chacun de ces liens de manière unique dans un tableau :
    $tab[$link] = 1;
    => $link sera enregistré une seule et unique fois dans ton tableau. Pas la peine de faire des filtrages sur ton tableau après avoir récupéré toutes les urls de ta page.

    Puis, pour chaque lien dans ton tableau, accéder à la page dédiée et faire le même process depuis AAA)


    -BBB) Soit de télécharger le contenu de ta page via CURL ou file_get_contents(), et utiliser le xpath pour localiser tous les liens présents dans la page.
    Voir ces liens pour le xpath :
    http://stackoverflow.com/questions/2...contain-needle
    http://stackoverflow.com/questions/1...ge-using-xpath

    Suite à cela, enregistrer chacun de ces liens de manière unique dans un tableau :
    $tab[$link] = 1;
    => $link sera enregistré une seule et unique fois dans ton tableau. Pas la peine de faire des filtrages sur ton tableau après avoir récupéré toutes les urls de ta page.
    Puis, pour chaque lien dans ton tableau, accéder à la page dédiée et faire le même process depuis BBB)


    Cdt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function googleIsYourF*ck*ngFriend(String url, String maQuestion){
        goTo(url);
        reponse = find(maQuestion);
        if(isAcceptable(reponse)){
            clickOn(By.xpath("//button[@id='resolvedButton']"));
        }
        sendMessage("Merci");
    }
    
    googleIsYourF*ck*ingFriend("http://www.google.fr", "ma question");

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 885
    Points : 6 619
    Points
    6 619
    Par défaut
    PHP dispose d'outils dédiés au parsing du HTML:
    • la classe DOMDocument qui créé une représentation arborescente d'un code html et dispose de méthodes permettant de charger, enregistrer, interroger et modifier.
    • la classe DOMXPath qui elle permet des requêtes complexes sur une instance de DOMDocument.


    Les expressions régulières sont inappropriées pour faire ce travail, notamment du fait de la permissivité de la syntaxe HTML et de l'extrême tolérance aux erreurs des clients qui l'utilise.

    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
    libxml_use_internal_errors(true); // évite l'affichage de warnings en cas de malformation du HTML
    $dom = new DOMDocument; 
    $dom->loadHTMLFile('http://url.de.la.page/en/question'); // charge le fichier html et créé l'arbre DOM 
     
    $xp = new DOMXPath($dom);
     
    // ensuite deux solutions:
    // - soit on créé une fonction pour vérifier l'host de l'url (on pourrait aussi vérifier le scheme "http://" dans la même fonction):
    $xp->registerNamespace('php', 'http://php.net/xpath');
    $xp->registerPhpFunctions('hasHost'); // on rend disponible la fonction hasHost dans XPath
     
    function hasHost($nodes, $host) {
        $href = $nodes[0]->nodeValue;
        return (strtolower(parse_url($href, PHP_URL_HOST)) == $host);
    }
     
    $nodeList = $xp->query('//a/@href[php:function("hasHost", ., "plantoburo.com")]');
     
    // - soit on vérifie le début de l'attribut href (mais c'est moins fiable et moins souple):
    // $nodeList = $xp->query('//a/@href[startswith("http://plantoburo.com", .)]');
     
     
    // affichage
    foreach ($nodeList as $node) {
        echo $node->nodeValue . PHP_EOL;
    }
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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