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'etaitUse 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