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 :

Crawler initiation et documentation


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut Crawler initiation et documentation
    Bonjour à tous, depuis quelque jours je m'intéresse beaucoup au crawl de site web à savoir parcourir les pages web et en extraire les informations voulu j'aimerai beaucoup prendre en main ce concept et réussir à faire des choses par moi même.
    Je suis tombé sur ce projet open source qui est superbe puisqu'il fonctionne très bien et facile à prendre en main:
    http://phpcrawl.cuab.de

    Franchement rien à dire le code est bien structuré bien commenté mais le problème c'est que c'est bien trop haut niveau pour moi on a 15 à 20 fichier de 700 lignes je ne sais même pas par où commencer.

    Donc ma question auriez vous des projet, des cours, des liens ou une simple explication qui permettent de mieux prendre en main ce concept ? Quoi qu'il en soit je veux juste réussir à le faire par moi même. Attention même si je ne comprend pas tout le projet je ne pars pas de 0 en PHP (html js etc) j'ai déjà créée des sites parfaitement fonctionnels dans le cadre de projet scolaire.

    J'aimerai déjà au moins extraire une page web en php car après je me doute qu'il suffit juste de la parcourir pour savoir ce qu'on veut par exemple si on veut les liens on cherche tout ce qu'il y a dans "href" avec une boucle pour parcourir tout les caractères de la page.

    Bien merci à celui qui me répondra.

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    En fait il y a 2 étapes pour faire ce que tu veux faire :
    - récupérer la page
    - extraire les infos

    Pour récupérer la page, curl inclus dans PHP fonctionne très bien.

    Pour l'extraction des infos, ca se complique. PHP propose domxpath, qui est performant mais t'oblige à apprendre Xpath. Plus simplement, tu peux jeter un coup d'oeil du côté de pquery ou querypath qui vont te permettre d'extraire les infos avec une syntaxe proche des sélecteurs de jquery.

  3. #3
    Membre à l'essai
    Homme Profil pro
    étudiant
    Inscrit en
    Juin 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2011
    Messages : 11
    Points : 11
    Points
    11
    Par défaut
    Oui justement je suis tombé sur Xpath de mon coté je n'ai toujours pas réussi à l'utiliser mais j'y travail, pour l'instant mon script n'est pas très poussé il tient en 30 lignes il prend le contenu de la page il en extrait tout les mots en supprimant les balises html. Cependant j'aimerai améliorer ce script en pouvant répertorier les liens les email etc.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    251
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 251
    Points : 383
    Points
    383
    Par défaut
    Un exemple valant mieux qu'un long discours

    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
    68
    69
    70
    71
    72
    73
    74
    75
     
    <?php
    function affichage($resultat_quath_query) {
    	echo "<br>";
    	print_r($resultat_quath_query);
    	echo "<br>";
     
    	foreach ($resultat_quath_query as $element) {
        echo "[". $element->nodeName. "]";
     
        $nodes = $element->childNodes;
        foreach ($nodes as $node) {
          echo $node->nodeValue. "<br>";
        }
      }
      echo "<hr>";
    }
     
    $html = '<html>
    <body>
    <a href="/lien1.html" class="lien_en_gras">premier lien</a>
    <div class="maclasse">
    <a href="/page2.html" class="lien_souligne">second lien</a>
    <p>
    Ceci est du texte<br>
    <a href="/page3.php" id="toto" class="lien_en_gras">troisieme lien</a>
    </p>
    </div>
    </body>
    </html>';
     
    $doc = new DOMDocument();
    $doc->loadHTML($html);
    /*
    libxml_use_internal_errors(true); // pour eviter les warning avec du html non valide
    $doc->loadHTMLFile('http://www.developpez.com'); // solution de pauvre - faut utiliser curl
    */
     
    $xpath = new DOMXpath($doc);
     
    echo "les ancres de tous les liens<br>";
    $xpath_liens = $xpath->query("//a");
    affichage($xpath_liens);
     
    echo "les attributs href de tous les liens<br>";
    $xpath_ancre = $xpath->query("//a/@href");
    affichage($xpath_ancre);
     
    echo "les attributs href de tous les liens qui ont un attribut id<br>";
    $xpath_ancre = $xpath->query("//a[@id]/@href");
    affichage($xpath_ancre);
     
    echo "les attributs href de tous les liens qui ont une attribut class qui vaut lien_en_gras<br>";
    $xpath_ancre = $xpath->query("//a[contains(@class,'lien_en_gras')]/@href");
    affichage($xpath_ancre);
     
    echo "tous les élements qui ont une attribut class qui commence par lien<br>";
    $xpath_ancre = $xpath->query("//a[starts-with(@class,'lien')]/@href");
    affichage($xpath_ancre);
     
    echo "les attributs href de tous les liens après un div<br>";
    $xpath_liens_div = $xpath->query("//div/a/@href");
    affichage($xpath_liens_div);
     
    echo "les attributs href de tous les liens dans un div<br>";
    $xpath_liens_div = $xpath->query("//div//a/@href");
    affichage($xpath_liens_div);
     
    echo "les attributs class de toutes les div<br>";
    $xpath_liens_div = $xpath->query("//div/@class");
    affichage($xpath_liens_div);
     
    echo "les attributs class de toutes les div et tous les a. parenthèses et | pour mettre 2 sélecteurs<br>";
    $xpath_liens_div = $xpath->query("(//div|//a)/@class");
    affichage($xpath_liens_div);
    Une bonne idée aussi c'est d'installer une extension pour Firefox (xpath checker) ou Chrome

Discussions similaires

  1. Documents apportés de ma propre initiative, a qui ils appartiennent ?
    Par nicopulse dans le forum Droit du travail
    Réponses: 12
    Dernier message: 14/11/2013, 10h08
  2. Initiation à COGNOS 8 : documentations ou liens
    Par thomas02 dans le forum Cognos
    Réponses: 1
    Dernier message: 07/12/2012, 11h25
  3. [WD-2010] Revenir à l'état initial d'un document
    Par goldvin dans le forum Word
    Réponses: 1
    Dernier message: 13/01/2012, 20h02
  4. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 16h28
  5. Bibliothèques et documentation
    Par Anonymous dans le forum OpenGL
    Réponses: 4
    Dernier message: 01/04/2002, 13h24

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