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 :

extraire des données différentes [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 152
    Points : 65
    Points
    65
    Par défaut extraire des données différentes
    Bonjour,

    J'extrai le contenu d'une page distante dans un document txt.

    Je souhaite extraire uniquement les ip et leurs ports...

    Le problème est que le contenu de cette page change constemment. Une fois les ip+ port sont sous le format:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td>128.220.247.29</td><td>3128</td></tr><tr><td>130.136.254.21</td><td>3124</td>
    et d'autres fois sous le format:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    td&gt;128.220.247.29&lt;/td&gt;&lt;td&gt;3128&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;130.136.254.21&lt;/td&gt;&lt;td&gt;3124&lt;/td&gt;
    Du coup, je ne sais pas trop comment faire mon regex...J'ai fait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      "#[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}[</td><td>|&lt;/td&gt;&lt;td&gt;][0-9]{0,5}#i",
    Mais cela ne semble pas fonctionner...et étant donné qu'il y a 2 choix, je ne sais pas comment faire le split...

    Merci de m'aider...

    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
    <?php
      // extraction ip
      $pattern = preg_match_all(
      "#[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}[</td><td>|&lt;/td&gt;&lt;td&gt;][0-9]{0,5}#i",
              $pattern,
    	      $text,
              $match2
          );
    if ($pattern) 
    {
    foreach($match2[0] as $resultat) 
    {
     
    list($ip, $port) = split("</td><td>", $resultat);
     
        echo "Extraction : ", $resultat, "\n <br>";    
        echo "dont l ip est: ", $ip, "\n";
        echo "et le port : ", $port, "\n\n <br><br>";
    ?>

  2. #2
    Membre régulier Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 99
    Points
    99
    Par défaut
    Essaye d'extraire avec ta première méthode, et si tu n'y arrive pas, tu utilise a seconde if()else. Sinon, tu peux créer un regex qui sera davantage "générique", c'est à dire qu'il couvrira tous les contextes d'extraction des IP / Ports.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 152
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Le problème est que je peux faire aussi bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "#[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}</td><td>[0-9]{0,5}#i",
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "#[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}&lt;/td&gt;&lt;td&gt;[0-9]{0,5}#i",
    Aucun des 2 ne fonctionnes...Enfin, la première méthode fonctionne uniquement si j'ai bien </td><td> dans mon fichier texte, mais pour le 2eme cas de figure cela ne fonctionne pas.

    Je suis assez novice au niveau des regex et je ne saurai donc en faire un générique tout de suite...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 11
    Points
    11
    Par défaut
    Utilises peut-être htmlentities() ou html_entity_decode() avant de filtrer.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 152
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    Alors voila ou j'en suis actuellement:

    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
     
    <?php
    //On ouvre le fichier texte
    $fp =  file("malist.txt");
     
    //On lit ligne par ligne
    foreach($fp as $line) 
    {
     
        echo "Extraction : ", $line, "\n <br>";
    	$daturl = $line;
    	$text = file_get_contents("http://www.freeproxylists.com/load_elite_1212288623.html");
     
            $a = html_entity_decode($text);
          // extraction ip
        $pattern = preg_match_all(
      "#[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}</td><td>[0-9]{0,5}#i",
    		  $a,
              $match2
          );
    if ($pattern) 
    {
    foreach($match2[0] as $resultat) 
    {
    include('../dbconnect.php');
    list($ip, $port) = split("</td><td>", $resultat);
    $insertBase = mysql_query("INSERT IGNORE INTO listeIp (Ipadress, port, InsertDate) VALUES ('$ip', '$port', now())") or die ('Erreur SQL...veuillez contacter l\'administrateur'.mysql_error());   
        echo "Extraction : ", $resultat, "\n <br>";    
        echo "dont l ip est: ", $ip, "\n";
        echo "et le port : ", $port, "\n\n <br><br>";
    }
    }
    }
    ?>
    En entrant directement l'url dans file_get_contents, cela fonctionne à merveille! Les ip et leurs ports sont extraits du site distant.

    Par contre si je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	$text = file_get_contents("http://www.freeproxylists.com/load_elite_$line");
     
    ou
     
    $text = file_get_contents('http://www.freeproxylists.com/load_elite_'.$line);
    Cela me retourne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Warning: file_get_contents(http://www.freeproxylists.com/load_elite_1212331848.html ) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/zeropr45/public_html/regex/freeproxylists-com.php on line 143
    Et cela me retourne cela pour toutes les url...alors que si je mets les url une à une dans file_get_contents, cela fonctionne...

    Je n'y comprends plus rien

  6. #6
    Membre régulier Avatar de arthak
    Profil pro
    Développeur informatique
    Inscrit en
    Mai 2008
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2008
    Messages : 91
    Points : 99
    Points
    99
    Par défaut
    Tu n'aurais pas oublier le .html ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 152
    Points : 65
    Points
    65
    Par défaut
    non, il est contenu dans la variable $line....qui est du type: 12345678.html

    D'ailleurs si au lieu de mettre tout dans un fichier texte, je l'insère dans ma base et que je récupère les données ensuite, cela fonctionne...bizarre...Je vais donc utiliser ma bdd au lieu du fichier.

    Merci tout de meme

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/03/2014, 10h34
  2. [XL-2010] extraire des données d'un tableau vers différents onglets selon la valeur d'une cellule
    Par piloupilou82 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 17/11/2013, 17h38
  3. Réponses: 7
    Dernier message: 29/09/2005, 10h19
  4. Réponses: 1
    Dernier message: 28/09/2005, 15h35
  5. extraire des données d'un code HTML
    Par blueice dans le forum Langage
    Réponses: 5
    Dernier message: 19/08/2004, 19h41

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