Schrift
[thread]9144[/thread]

HTML::LinkExtor: mein Testscript haut nicht hin :(

Leser: 1


<< >> 10 Einträge, 1 Seite
RPerl
 2007-07-01 14:50
#78092 #78092
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Hi,

hab mal eine Frage - rein Interesse halber:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

use strict;
use warnings;
use LWP::Simple;
use HTML::LinkExtor;

my $url = 'http://www.perl-community.de/';
my $content;

sub connect {
    $content = get($url);
    return $content;
}


&connect();

my $p = HTML::LinkExtor->new();
$p->parse_file($content);

if($p->links) { print $p->links; }


Kann das Modul nur aus einer File die Links extrahieren?
Oder warum haut das nicht hin?!

Danke!

rPerl
Ronnie
 2007-07-01 14:53
#78093 #78093
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
connect() wird [s]nie[/s] ausgeführt, aber nicht zugewiesen!\n\n

<!--EDIT|Ronnie|1183287296-->
RPerl
 2007-07-01 15:05
#78094 #78094
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Wie meinst Du das?

// Edit:

$content ist danach auch gefuellt und wird uebergeben an den parser.

// Edit 2:

Ich mein, wenn ich es in eine Datei speichere, dann geht es ja prima!

Code (perl): (dl )
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
#!/usr/bin/perl

use strict;
use warnings;
use LWP::Simple;
use HTML::LinkExtor;

my $url = 'http://www.perl-community.de/';
my $content;

sub connect {
    $content = get($url);
    open(FH,">index.html");
    print FH $content;
    close(FH);
}

sub cb {
    my($tag, %links) = @_;
    print %links , "\n";
}


&connect();
my $p = HTML::LinkExtor->new(\&cb);
$p->parse_file("index.html");


Bis auf die tatsache das er die Links falsch parst.

Sieht so aus z.B.:

Code: (dl )
hrefhttp://perlmongers.de/?StuttgartPM


sollte aber wohl eher so aussehen:

Code: (dl )
http://perlmongers.de/?StuttgartPM


vielleicht bugs oder so.

Naja mal gucken was die anderen noch so dazu posten! :)

Danke und Gruß,

rPerl

// Edit 3:

So funktoniert es richtig:

Code (perl): (dl )
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
#!/usr/bin/perl

use strict;
use warnings;
use LWP::Simple;
use HTML::LinkExtor;

my $url = 'http://www.perl-community.de/';
my $content;

sub connect {
    $content = get($url);
    
    open(FH,">index.html");
    print FH $content;
    close(FH);
}

sub cb {
    my($tag, %links) = @_;
    while ( my ($key, $value) = each (%links)) {
        if($value) { 
            print $value , "\n"; 
        } else {
            print "[-] nix gefunden glaub ich";
        }
    }
}


&connect();
my $p = HTML::LinkExtor->new(\&cb);
$p->parse_file("index.html");
unlink("index.html");


Aber irgendwie zweifele ich an der Sauberkeit .oO\n\n

<!--EDIT|RPerl|1183290212-->
renee
 2007-07-01 16:47
#78095 #78095
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du musst parse anstatt parse_file nehmen:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use strict;
use warnings;
use HTML::LinkExtor;
use LWP::Simple;
use Data::Dumper;

my $url = 'http://www.perl-community.de';
my $content = get( $url );

my $link_extor = HTML::LinkExtor->new;
$link_extor->parse( $content );

my @links = $link_extor->links;

for my $link ( @links ){
    print $link->[2],"\n";
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
RPerl
 2007-07-01 17:26
#78096 #78096
User since
2006-11-26
384 Artikel
BenutzerIn

user image
wow, liefert sogar als array zurueck.
Besten dank, renee!

Gruß,

rPerl
Ronnie
 2007-07-01 18:26
#78097 #78097
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
[quote=RPerl,01.07.2007, 13:05]Wie meinst Du das?

// Edit:

$content ist danach auch gefuellt und wird uebergeben an den parser.[/quote]
Sorry, dachte es wäre eine lexikalische Variable der Funktion, ist aber eine des Skriptes. Ist aber kein guter Stil.
RPerl
 2007-07-01 22:47
#78098 #78098
User since
2006-11-26
384 Artikel
BenutzerIn

user image
aaah stop.
Wieso / Für was benutzt renee da Data::Dumper?!

ich werde dieses Modul wohl in 100 Jahren nicht verstehen.
renee
 2007-07-02 00:13
#78099 #78099
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das war nur wegen einem Test drin. Brauchst Du hier nicht.

Allgemein ist das Modul sehr praktisch wenn Du komplexere Datenstrukturen verstehen willst (welchen Inhalt sie haben).

z.B.
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my %hash;

print Dumper \%hash;

$hash{test} = 'Hallo Welt';

print Dumper \%hash;

$hash{arraytest} = [qw/Dies ist ein Test/];

print Dumper \%hash;
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
nepos
 2007-07-02 11:07
#78100 #78100
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Bau dir mal in einem Skript komplexe verschachtelte Datenstrukturen auf. Danach wirst du Data::Dumper lieben ;)
Daneben kann man es auch benutzen, um Perl-Datenstrukturen und Objekte persistent in ne Datei oder Datenbank zu schreiben (Stichwort: Serialisierung), wobei es dafür glaube ich aber auch performantere Module gibt.
RPerl
 2007-07-02 12:13
#78101 #78101
User since
2006-11-26
384 Artikel
BenutzerIn

user image
Danke an euch beide. Ihr habt mir wie immer geholfen! :)
Gibt kaum ein Forum wo die Leuts so hilfsbereit sind wie hier.
<< >> 10 Einträge, 1 Seite



View all threads created 2007-07-01 14:50.