use HTTP::Request; use LWP::UserAgent; use HTML::TreeBuilder; $ua = LWP::UserAgent->new; $request = HTTP::Request->new(GET => 'http://slashdot.org/'); $resp = $ua->request($request); $tree = HTML::TreeBuilder->new; $tree->parse($resp->content); my @titles; my @authors; my @dept; foreach my $h ($tree->look_down('_tag', 'font', sub { return unless ($_[0]->attr('face') and $_[0]->attr('size') and $_[0]->attr('color')); my @c = $_[0]->content_list; return unless ref $c[0]; my @d = $c[0]->content_list; return 1 if not ref $d[0]; $#c == 0 and $c[0]->tag eq 'b' and $d[0]->tag ne 'map'; } )) { push @titles, $h->as_text; } foreach my $h ($tree->look_down('_tag', 'b', sub { my @c = $_[0]->content_list; @c == 3 and ref $c[1] and $c[1]->tag eq 'a' and $c[0] =~ /^Posted by/; } )) { push @authors, $h->as_text; } foreach my $h ($tree->look_down('_tag', 'b', sub { my @c = $_[0]->content_list; @c == 1 and $c[0] =~ /^from the .* dept\.$/; } )) { push @dept, $h->as_text; } for($i=0; $i<10; $i++) { print "$titles[$i]\n"; print "$authors[$i]\n"; print "$dept[$i]\n\n"; } $tree = $tree->delete;