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