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 Perl Discussion :

recuperer contenu sur des url contenant des variables.


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    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
    Par défaut recuperer contenu sur des url contenant des variables.
    Bonjour,

    Je suis débutant en perl et je me heurte à un petit problème...

    Fonction de mon script:

    1) Le script se connecte à ma base de données pour récupérer une liste d'url.
    2) Le script parcoure les sites afin de récupérer des url sur ces sites
    3) Le script récupère l'adresse ip des serveurs appartenant aux urls récupérées.

    Le script fonctionne bien, mais lorsque j'ai des url dans ma base qui sont du type:

    http://www.lesite.com/index.php?method=pv&cat=&start=41

    Cela ne "m'aspire" pas la bonne page...En effet, cela récupèrera le contenu de la page http://www.lesite.com/index.php et ne prendra pas en compte les variables... :-(

    Pourriez vous m'aider svp?

    Script:

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    #!/usr/bin/perl
    use warnings;
    umask 0;
    use Config;
    use DBI;
    use DBD::mysql;
    use LWP::Simple;
    use threads;
    use strict;
    use CGI;
    use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
     
    my $cgi = CGI->new;
    print $cgi->header;
    $| = 1;
     
    $Config{useithreads} or die "Recompile Perl with threads to run this program. \n";
    my @threads;
    my $threadcount = 50;
    my $enablethreading = 1;
     
    my $dbh;
     
    sub connectDB {
    	my $hostname = "localhost";
    	my $database = "xxxx";
    	my $username = "xxx";
    	my $password = "xxxxx";
    	$dbh = DBI->connect("DBI:mysql:$database:$hostname", $username, $password) or die "Can't connect to the DB: $DBI::errstr\n"; 
    }
     
    sub processHost {
    	my ($host) = @_;
    	my ($hostonly) = $host =~ m/[a-z0-9][a-z0-9-.]*[.][a-z.]+[a-z]/ig;
    	my ($ip) = `host -W 3 -t A $hostonly 2>/dev/null` =~ m/[0-9]+[.][0-9]+[.][0-9]+[.][0-9]+/g;
    	connectDB();
    	if ($ip) {
    		print "<b>[ " . threads->self()->tid() . " ]</b> <a href=\"http://$host\">$host</a> - $ip <br/>\n";
    		$dbh->prepare("INSERT IGNORE INTO listeIp (Ipadress, url, Type, InsertDate) VALUES ('$ip', '$host', 'WebProxy', NOW())")->execute();
    	} else {
    		print "<b>[ " . threads->self()->tid() . " ]</b> <a href=\"http://$host\">$host</a> - NO IP <br/>\n";
    		$dbh->prepare("INSERT IGNORE INTO UrltoVerify (url) VALUES ('$host')")->execute();
    	}
    }
     
    sub parseHosts {
    	my ($url) = @_;
    	my $content = `curl --header "User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14" $url 2>&1`;
    	my $hostpattern = "[a-z0-9][a-z0-9-.]*[.][a-z.]+[a-z]/?[a-z0-9_./-]*";
    	my $p1 = "href=[\"]($hostpattern)[\"] onclick";
    	my $p2 = "href=[\"]http://($hostpattern)[\"] onclick";
    	my $c = 0;
    	while ($content =~ m/($p1)|($p2)/igs) {
     
    		if ($2) {
    			processHost($2);
    		} elsif ($4) {
    			processHost($4);
    		} 
    	}
    }
     
    sub parseHostsThreaded {
    	my ($url) = @_;
    	for (my $t = 0; $t < $threadcount; $t++) {
    		if (!$threads[$t]) {
    			$threads[$t] = threads->new(\&parseHosts, $url);
    			return;
    		}
    	}
    	closeOpenThreads();
    	parseHostsThreaded($url);
    }
     
    sub closeOpenThreads {
    	for (my $t = 0; $t < $threadcount; $t++) {
    		if ($threads[$t]) {
    			$threads[$t]->join();
    			$threads[$t] = 0;
    		}
    	}
    }
     
    connectDB();
    my $sth = $dbh->prepare("SELECT * FROM listeUrl WHERE category=1");
    $sth->execute;
    my $t = -1;
    while (my @row = $sth->fetchrow_array()) {
    	if ($enablethreading) {
    		parseHostsThreaded($row[1]);
    	} else {
    		parseHosts($row[1]);
    	}
    }
    closeOpenThreads();

  2. #2
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	my $hostpattern = "[a-z0-9][a-z0-9-.]*[.][a-z.]+[a-z]/?[a-z0-9_./-]*";
    	my $p1 = "href=[\"]($hostpattern)[\"] onclick";
    	my $p2 = "href=[\"]http://($hostpattern)[\"] onclick";
    car les adresses du type http://www.lesite.com/index.php?method=pv&cat=&start=41 sont coupées

    L'erreur vient elle de l'expression régulière qui tronque ton adresse?

    Si c'est le cas, tu pourrais utiliser les balises ^ et $ et ajouter .* à la fin de l'expression régulière afin de forcer la récupération de tous tes caractères /^ .*$/

    [a-z0-9_./-] peut être simplifié par [\w./-] sauf si tu crains les lettres majuscules.

  3. #3
    Membre confirmé
    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
    Par défaut
    Bonjour

    Mer ci pour votre aide. L'erreur ne vient pas de la car la il s'agit de la ligne récupérant des url sur les sites dont l'url initiale a été extraite de la base de donnée.

    Comme expliqué, dans ce script, en premier, on se connecte à ma base mysql pour récupéré une liste d'url.

    Ensuite sur chaque site, on va récupérer d autres url, qui cont ensuite être modifiées en ip.

    LE probleme vient des url extraite de ma base. Si elle contienne des variable cela ne marche pas

  4. #4
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    LE probleme vient des url extraite de ma base. Si elle contienne des variable cela ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM listeUrl WHERE category=1
    L'étoile ne récupère t'elle pas correctement la valeur de l'url?

    Dans ce cas le problème vient de la requête SQL? Chez moi, j'arrive à récupérer la valeur 'http://www.lesite.com/index.php?method=pv&cat=&start=41' dans un champ de ma DB et à la placer dans une variable perl sans problème. As-tu fait un post dans la partie SQL du forum?

  5. #5
    Membre confirmé
    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
    Par défaut
    Bonjour,

    Je n'ai pas fait la totalité de ce script, et si je comprends, le script récupère tout le contenu de ma table, (champ url, id, problem)

    Par contre je ne vois pas ou sont réutilisées les url récupérées dans la base?

    Si dans ma base de données, les url sont du type http://www.proxxies.com/index.php

    Cela marchera, le script se rendra à cette adresse et ira extraire toutes les url correspondantes au regex, puis cherchera l'adresse ip du serveur hébergeant l'url récupérée.

    Par contre si dans ma base l'url est du type: http://www.proxxies.com/index.php?me...&cat=&start=21

    Cela récupérera les url de http://www.proxxies.com/index.php

    Donc j'en déduis que les variables ne sont pas prises en compte, et ici elles servent à la pagination apparemment...

  6. #6
    Membre éprouvé
    Avatar de Jasmine80
    Femme Profil pro
    Bioinformaticienne
    Inscrit en
    Octobre 2006
    Messages
    3 157
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Bioinformaticienne
    Secteur : Santé

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3 157
    Par défaut
    Par contre je ne vois pas ou sont réutilisées les url récupérées dans la base?
    les url sont déjà réutilisées ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `curl --header "User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14" $url 2>&1`
    Mais apparemment elles se baladent aussi dans le script de sous programme en sous programme

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/10/2009, 10h36
  2. url contenant des variables
    Par torn33260 dans le forum Langage
    Réponses: 2
    Dernier message: 31/03/2008, 13h13
  3. JTable contenant des JComboBox contenant des Images
    Par lex13 dans le forum Composants
    Réponses: 4
    Dernier message: 31/07/2007, 15h57
  4. Réponses: 6
    Dernier message: 10/06/2005, 23h56

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