Bonjour , j'ai besoin d'aide pous déboguer et ajouter quelque fonctions a ce script.
Voila tout d'abord j'ai l'impréssion sur la fonction Array_Unique ne remplie pas sont role ou que je l'est mis a mauvaise endroit.
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 = "Dev/0.9; (http://<a href="http://www.developpez.com)";" target="_blank">www.developpez.com)";</a> use LWP::UserAgent; use HTML::LinkExtor; use URI::URL; $| = 1; sub spider (%); spider URL => '$url'; sub spider (%) { my %args = @_; my @startlinks : shared = ("http://www.webrankinfo.com"); push(@startlinks, $args{URL}); my $ua = LWP::UserAgent->new; $ua->agent('Mozilla/5.0 (compatible; Dev/0.9; +http://<a href="http://www.developpez.com)');" target="_blank">www.developpez.com)');</a> 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); # Semble ne pas marcher ???? ##################################### # 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); }
De plus je cherche depuis quasi 1 mois a ajouter cette fonction au robot
Comme vous pouvez le voir cette fonction sert a supprimé de @links les liens pointant contenant .css ,.js, .ico, onclick, mais la encore après de nombreux essaie je ne suis arrivé a rien a part des bugs.sub vide
{
my @t = (".css",".js","onclick",".ico");
{
my $temp = join "|", (map { quotemeta($_) } @t);
$temp = qr/$temp/;
@links = grep { /$temp/ } @links;
}
$, = ", ";
return @links;
}
Enfin j'ai un souci avec cette ligne
perl me renvoie l'erreur suivante
Code : Sélectionner tout - Visualiser dans une fenêtre à part if ($links[$i++] eq $start_link) {Pourtant le robot continue a fonctionner comme si de rien n'etait :Use of uninitialized value in string eq at bot.pl line 57
Pouvez vous m'aider sil vous plait sa fait 30 piges que je vais d'echec en echec je sèche sur ce coup la HELP, HELP
Partager