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 :

[langage] Moteur de recherche


Sujet :

Langage Perl

  1. #21
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    $| = 1; est simplement une façon d'activer l'autoflush sur la sortie standard (ou plutôt sur le handle de fichier select()ionné à ce moment précis), autrement dit le buffer (tampon) associé à ce fichier sera automatiquement flushé (vidé, écrit sur le disque, envoyé sur la console...) à chaque écriture (à chaque print). C'est surtout utile pour la sortie standard, lorsqu'on veut afficher en continu des messages sur la console qui ne se terminent pas forcément par des "\n" (caractère qui provoque le flush du handle de fichier sur beaucoup d'OS, mais mieux vaut ne pas s'y fier si on vise vraiment au multiplateforme).

    --
    Jedaï

  2. #22
    Membre actif Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Points : 234
    Points
    234
    Par défaut
    Oki Jedai

    Bon voici ma version Multithreading du robot il marche mais mon compilateur me sort un erreur a la ligne 57
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($links[$i++] eq $start_link) {
    je ne comprend pas ??? !!! : --


    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
    96
    97
    98
    99
    100
    101
    102
    #!/usr/bin/perl -w
    use strict;
    use threads;
    use threads::shared;
     
     
    my $thr = threads->new(\&spider);
       $thr = threads->new(\&Array_Unique);
     
    my $VERSION = "Robot experimental/0.1";
     
    use LWP::UserAgent;
    use HTML::LinkExtor;
    use URI::URL;
     
    $| = 1;
     
    sub spider (%);
     
    spider URL => '$url';
     
    sub spider (%) {
    	my %args = @_;
     
    	my @startlinks : shared = ("http://hardware.fr");
     
    	push(@startlinks, $args{URL});
     
     
    	my $ua = LWP::UserAgent->new;
     
     
             $ua->agent('Mozilla/5.0 (compatible; Bot/0.1; +http://developpez.com');
     
    	WORKLOOP: while (my $link : shared = shift @startlinks) {
     
    		for (my $i : shared = 0; $i< $#startlinks; $i++) {
    			next WORKLOOP if $link eq $startlinks[$i];
    		}
    		print ">>>>> working on $link\n";
    	        HTML::LinkExtor->new(
              	  sub {
    			my ($t, %a) = @_;
    			my @links = map { url($_, $link)->abs() }
    			grep { defined } @a{qw/href img/};
     
    			# mark already spidered links for removal
    			foreach my $start_link (@startlinks) {
    				my $i : shared = 0;
    				for (0 .. $#links) {
    					if ($links[$i++] eq $start_link) {
    						$links[$i -1] = "'REMOVE'";
    					}
    				}
    			}
     
    			@links = sort @links;
    			for (my $i : shared = 0; $i< $#links; $i++) {
    				$links[$i] = "'REMOVE'" if $links[$i] eq $links[$i +1];
    			}
    			@links = grep { $_ ne "'REMOVE'" } @links;
     
                      #####################################
                      #      Suppréssion des doublons     #
                      #####################################
     
                      @links = Array_Unique(@links);
     
     
     
                      #####################################
                      #      Impréssion des résultats     #
                      #####################################
     
     
    			print "+ $_\n" foreach @links;
     
     
    			push @startlinks, @links if @links;
              	  } ) -> parse(
               	  do {
                   		my $r = $ua->simple_request
                     	(HTTP::Request->new("GET", $link));
                   		$r->content_type eq "text/html" ? $r->content : "";
               	  }
             	)
    	}
    }
     
     
    ##############################################################
    # Suppréssion des doublons
    ##############################################################
     
         sub Array_Unique
         { 
         my %vu; 
         for my $elem( @_ ) { 
             ++$vu{$elem}; 
         } 
         (keys %vu); 
         }
    Everybody have in their the potential to be their own god : Marilyn Manson

  3. #23
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 73
    Points : 49
    Points
    49
    Par défaut
    Mobscene je sais pas ce qui déconne.

    Dans le robot j'ai ajouter le ce sous programme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
         sub interdit
         {  
     
          my @t = (".css",".zip",".rar",".tar",".ico",".wmv"); 
          { 
            my $temp = join "|", (map { quotemeta($_) } @t); 
            $temp = qr/$temp/;
    @links = grep { not /$temp/ } @links; Ici perl me signifie une erreur
    return @links; Ici aussi


    Vraiment je pige pas la ????


    Que j'appelle comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     @links = interdit(@links);
    avec biensur au début du script

    $thr = threads->new(\&interdit);

  4. #24
    Membre actif Avatar de mobscene
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    331
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 331
    Points : 234
    Points
    234
    Par défaut
    J'ai remarqué qu'au baout d'un moment le robot ralentissait significativement
    Everybody have in their the potential to be their own god : Marilyn Manson

Discussions similaires

  1. Moteur de recherche sans langage serveur
    Par laurentSc dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/02/2014, 07h48
  2. Moteur de recherche: quel langage choisir?
    Par Florent-g dans le forum Langages de programmation
    Réponses: 6
    Dernier message: 13/11/2009, 18h40
  3. comment faire ma base de donnée pour un moteur de recherche
    Par HoB dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/05/2004, 15h07
  4. Moteur de recherche par date
    Par Prue dans le forum ASP
    Réponses: 17
    Dernier message: 27/08/2003, 16h07
  5. [Technique] Index, comment font les moteurs de recherche ?
    Par bat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 25/10/2002, 15h41

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