use strict; use warnings; use LWP::UserAgent; use HTML::TreeBuilder; my $ua = LWP::UserAgent->new(); $ua->agent("MyApp/0.1"); my $req = HTTP::Request->new(GET => 'http://perlmonks.org/?node=Saints%20in%20our%20Book'); my $res = $ua->request($req); unless($res->is_success) { die $res->status_line; } my $tree = HTML::TreeBuilder->new(); $tree->parse($res->content); $tree->eof(); print <<'EOF' ; EOF sub dump_saints { my $element = shift; if($element->tag() eq 'table') { my @contents = $element->content_list; if(@contents > 10) { # The saints table has lots of rows my %saints; shift(@contents); # The first row is headers foreach my $row (@contents) { my ($id) = (((($row->content_list())[1]->content_list())[0]->content_list())[0]->attr('href') =~ m/=(.*)/); my ($level) = ((($row->content_list())[3]->content_list())[0] =~ m/([^ ]*)/); push(@{$saints{$level}}, $id); } foreach my $level (keys %saints) { print "var $level = [" . join(',',@{$saints{$level}}) . "];\nfor( var i=$level.length-1; i>=0; i--) SaintsBook[$level\[i]] = '$level';\n\n"; } } } foreach my $e ($element->content_list()) { if(ref($e) and $e->isa('HTML::Element')) { dump_saints($e); } } }