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

Web Perl Discussion :

Ou l'ont reparle des web spider


Sujet :

Web Perl

  1. #1
    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 Ou l'ont reparle des web spider
    J'ai fait un script de web spider mais il ne marche pas , je n'est des erreurs dans tt les sens , pourriez vous me dire ce qui ne marche pas car c'est mon premier gros script je ment sert comme exo mais le je suis vraiment pommé j'arrive pas a le debug.

    Bref je me suis emmélé les pinceaux

    Voici mon code ultra Bogué

    Certain bout de code ont été recup sur le forum

    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    #!/usr/bin/perl -w
    use strict;
    use LWP::UserAgent;
    use HTML::LinkExtor;
    use URI::URL;
    use WWW::RobotRules;
    use DBI;
    require HTML::TreeBuilder;
    require HTML::FormatText;
    use URI::URL;
    use Regexp::Assemble;
     
    $| = 1;
     
    #---------------------------------------
    # Creation de l'agent
    # Create the user agent
    #---------------------------------------
    my $VERSION = "WowSpider/0.1";
    my $ua = LWP::UserAgent->new;    
       $ua->agent('Mozilla/5.0 (compatible)');
    my $rules = WWW::RobotRules->new('Mozilla/5.0 (compatible)');
    #---------------------------------------
    # Configuration du robot
    # Configure the robot
    #---------------------------------------
     
      $ua->protocols_allowed( ['http'] );
      $ua->timeout(4);
      $ua->requests_redirectable( ['HEAD'] );
      $ua->cookie_jar({ file => "$ENV{HOME}\/\.cookies.txt" });
      $ua->max_redirect(10);
      $ua->protocols_forbidden( ['mailto','https','gopher','ftp','socks','file'] );
     
    #---------------------------------------
    # Test de connection a Mysql
    # Test if Mysql is alive
    #---------------------------------------
     
      $dbh = DBI->connect("DBI:mysql:$database:$hostname", $mysqluser, $mysqlpass) or $connection = 1;
      if ($connection == 1)
       {
        print "Content-type: text/html\n\n";
        print "<div align=center>The Mysql server is dead</div>";
        $dbh->disconnect;
        exit;
      }
     
    #---------------------------------------
    # Chargement des liens de démarrage
    #---------------------------------------
     
      $sth = $dbh->prepare("SELECT * FROM links");
     
      $sth->execute( $links );
     
      my @start_link = split//, $sth;
     
     
     
    #---------------------------------------
    # Chargement automatique de ARGV
    #---------------------------------------
     
    @ARGV = @start_link;
     
    @start_links { @ARGV } = (1) x @ARGV;
    # @start_links = spider(@start_links);
     
    #---------------------------------------
    # Lancement du spider
    #---------------------------------------
     
     
     
    sub spider
    {
     my $url = join ("", @_);
     
     foreach ($url)
     {
     
        # =================================
        # Je ne garde que les url valides
        # =================================
        $url = rules($url);
     
          # =================================
          # Je met $url dans @urls
          # =================================
          my @urls = ("$url");
     
          # =================================
          # Je supprime les urls interdite
          # =================================
            @urls = vide(@urls);
     
                 # ====================================================
                 # Je met les doc dans @doc et les images dans @pictures ...
                 # ====================================================
     
                 my %dispatch = (
                 map( { $_, 'urls' } qw{ htm asp aspx nux mspx cfm html xhtml jhtml php php3 php4 shtml jsp php4 php5 pm }),
                 map( { $_, 'pictures' } qw{ jpg jpeg png gif }),
                 map( { $_, 'doc'} qw{ doc rtf pdf xls }),);
     
     
                 # my @source = qw/ a.doc B.DOC, c.jpg, d.mp3 /;
                 my( %resultat );
     
                      for my $s( @urls ) {
                         my ($ext = $s) =~ s/^.*?\.([^.]+)$/lc $1/e;
                          push @{$resultat{$dispatch{$ext} || 'iconnu'}}, $s;
                      }
     
                        for my $r (keys %resultat) {
                          print "$r\n";
                          for my $adr( @{$resultat{$r}} ) {
                             print "\t$adr\n";
                            }
                      }
     
                         # =============================
                         # Je reconstruit les scalaires
                         # =============================
     
                          # Hear we remake @urls $url
                          $url = ""; # Flush $url content
                          $url = join ("", @urls); # Remake it :)
     
                                 # Hear we make $doc scalar
                                 my $doc = join ("", @doc);
     
                          # Hear we make $picture scalar
                          my $picture = join ("", @pictures);
     
     
     
                          # ======================================================
                          #  Ici j'extrait les urls
                          # ======================================================
     
     
                              # Download page code
                              my $code_url = $ua->request(HTTP::Request->new(GET => '$url'));
     
                                     # Now Extract links
                                     my @urls = ();
     
                                  # Make the parser
                                  my $p = HTML::LinkExtor->new(\&extor);
                                  my $res = $ua->request(HTTP::Request->new(GET => $url),
                                                                 sub {$p->parse($_[0])});
     
     
                               # Expand links to absolute ones
                               my $base = $res->base;
                               @urls = map { $_ = url($_, $base)->abs; } @urls;
     
                               &spider(@urls);
     
                             my $new_links = join ("", @urls);
     
     
                # ==========================================
                #   Ici je tente d'associer chaque pas avec sont adresse et sont code
                # ==========================================
     
     
             my $code_page = $ua->request(HTTP::Request->new(GET => $new_links));
     
             my @page = ("$new_links","$code_page","$new_links","$new_links");
     
             my %page = @page;
     
               # ===========================================
               #   Mette un analyseur ici :(
               # ===========================================
     
               # require "indexer.pl";
     
     }
    }
     
    #---------------------------------------
    # Extor Method
    # Method Extor
    #---------------------------------------
     
    sub extor
    {
         my($tag, %attr) = @_;
         return if $tag ne 'href';
         push (my @urls, values %attr);
    }
     
     
    #---------------------------------------
    # Parser Robots.txt
    #---------------------------------------
     
    sub rules
    {
    # en fair la je tente de couper les url http://???.com?????/GGG/.htm
    # pour en faire http://???.com/robots.txt
     my $url .= "\/robots\.txt" unless ($_ =~ /\/$/);
      {
       my $robots_txt = get $url;
       $rules->parse($url, $robots_txt) if defined $robots_txt;
      }
      if($rules->allowed($url)) {
      # If the url is allowed we return it :)
         return $url;
     }
    }
     
     
     
     
    #---------------------------------------
    # Suppression des liens blacklisté
    #---------------------------------------
     
    sub vide
    {
     my ($fichier) = "Filtre";
      open FICHIER, $fichier || die "Unable to open $fichier: $!"; 
       my @l_filtres = "<FICHIER>"; 
        close FICHIER; 
         chomp @l_filtres; 
        my $filtre = join "|", (map { quotemeta($_) } @l_filtres); 
       $filtre = qr/$filtre/; 
      return grep { !/$filtre/ } @_;
    }
    Merci pour vos idées , suggestions , critiques qui maideront a progresser
    Everybody have in their the potential to be their own god : Marilyn Manson

  2. #2
    vic
    vic est déconnecté
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Points : 498
    Points
    498
    Par défaut
    Et donc, tu veux qu'on analyse les 200 lignes une par une pour trouver le problème ou on a droit à un indice ?

Discussions similaires

  1. Quelle est la meilleure solution pour créer des Web Services?
    Par Flipmode dans le forum Services Web
    Réponses: 1
    Dernier message: 26/04/2007, 15h12
  2. Réponses: 3
    Dernier message: 08/03/2007, 10h16
  3. [C#] Intéroéraibilité des Web Services C# ---> Java
    Par dcollart dans le forum Services Web
    Réponses: 3
    Dernier message: 07/12/2006, 11h29
  4. [AXIS] deploiment des web services
    Par Mizou dans le forum Tomcat et TomEE
    Réponses: 26
    Dernier message: 03/07/2006, 17h16
  5. [AXIS] deploiment des web services
    Par Mizou dans le forum Services Web
    Réponses: 2
    Dernier message: 27/06/2006, 11h54

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