in reply to Re^6: duplicate table with HTML::TreeBuilder look_down method
in thread duplicate table with HTML::TreeBuilder look_down method
That is because you are working with a two dimensional array. You are very close, you just need to further dereference the variable $td
However ... what are you going to do with the results, which are bits of HTML stored as strings?foreach my $td (@tds) { say for @$td; }
You most likely need something more like this:
use strict; use warnings; use Data::Dumper; use HTML::TreeBuilder; my $h = HTML::TreeBuilder->new; $h->parse_content( do{ local $/; <DATA> } ); my @headers = map @{ $_->content }, $h->look_down( class => qr/HeaderTitle\b/ ) ; my @matched = map ref $_ ? @$_ : $_, map $_->content, $h->look_down( _tag => 'td', class => qr/Alt(Warn +ing|Error)\b/ ) ; my @tmp = map[ @matched[ $_ .. $_ + @headers - 1] ], range( 0, $#matched, scalar(@headers) ) ; my @records; for (@tmp) { my %hash; @hash{@headers} = @$_; push @records, {%hash}; } print Dumper \@records; sub range {grep!(($_-$_[0])%($_[2]||1)),$_[0]..$_[1]} __DATA__ <TABLE class=HeaderFrame height=100 cellSpacing=0 cols=3 cellPadding=0 + width="100%" border=0 align="left"> <TR vAlign=top height=100> <TD vAlign=top width="100%" height="100"> <DIV style="overflow: auto; width: "100%"; height: 200; valign: +top"> <TABLE cellSpacing=0 cols=4 cellPadding=0 width="100%" border=0 +height="100"> <TR height=25 nowrap> <TD class=HeaderTitleNoVLine height="14" width="10"> </ +TD> <TD class=HeaderTitle noWrap align=left height="14">Status</ +TD> <TD class=HeaderTitle noWrap align=left height="14">Results< +/TD> <TD class=HeaderTitle noWrap align=left height="14">Schedule + Start</TD> <TD class=HeaderTitle noWrap align=left height="14">Actual S +tart</TD> <TD class=HeaderTitle noWrap align=left height="14">Schedule + Name</TD> <TD class=HeaderTitle noWrap align=left height="14">Node Nam +e</TD> <TD class=HeaderTitle noWrap align=left height="14">Domain N +ame</TD></TR> <TR class=AltLight height=22> <TD class=AltLightNoVline align=middle height="17" width="10 +"> </TD> <TD class=AltLight align=left height="17">Completed</TD> <TD class=AltLight align=left height="17">Successful</TD> <TD class=AltLight align=left height="17">2015-05-11-17.00</ +TD> <TD class=AltLight align=left height="17">2015-05-11-17.10</ +TD> <TD class=AltLight align=left height="17">DAILYBACKUP_5PM</T +D> <TD class=AltLight align=left height="17">ServerA</TD> <TD class=AltLight align=left height="17">ST10_DOMAIN</TD></ +TR> <TR class=AltWarning height=22> <TD class=AltWarningNoVline align=middle height="17" width=" +10"> </TD> <TD class=AltWarning align=left height="17">Missed</TD> <TD class=AltWarning align=left height="17"></TD> <TD class=AltWarning align=left height="17">2015-05-11-18.00 +</TD> <TD class=AltWarning align=left height="17"></TD> <TD class=AltWarning align=left height="17">DAILYBACKUP_6PM< +/TD> <TD class=AltWarning align=left height="17">ServerB</TD> <TD class=AltWarning align=left height="17">ST10_DOMAIN</TD> +</TR> <TR class=AltWarning height=22> <TD class=AltWarningNoVline align=middle height="17" width=" +10"> </TD> <TD class=AltWarning align=left height="17">Missed</TD> <TD class=AltWarning align=left height="17"></TD> <TD class=AltWarning align=left height="17">2015-05-11-18.00 +</TD> <TD class=AltWarning align=left height="17"></TD> <TD class=AltWarning align=left height="17">NJDLYBACKUP_6PM< +/TD> <TD class=AltWarning align=left height="17">ServerC</TD> <TD class=AltWarning align=left height="17">ST13_DOMAIN</TD> +</TR> <TR class=AltDark height=22> <TD class=AltDarkNoVline align=middle height="17" width="10" +> </TD> <TD class=AltDark align=left height="17">QATSWAS85</TD> <TD class=AltDark align=left height="17">37899</TD> <TD class=AltDark align=left height="17">104,113</TD> <TD class=AltDark align=left height="17">617</TD> <TD class=AltDark align=left height="17">0</TD> <TD class=AltDark align=left height="17">0</TD> <TD class=AltDark align=left height="17">0</TD> <TD class=AltDark align=left height="17">25</TD> <TD class=AltDark align=left height="17">13</TD> <TD class=AltDark align=left nowrap height="17">251.30 MB</T +D> <TD class=AltDark align=left height="17">00:00:58</TD> <TD class=AltDark align=left height="17">4,378.98</TD> <TD class=AltDark align=left height="17">0%</TD> </TR> <TR class=AltLight height=22> <TD class=AltLightNoVline align=middle height="17" width="10 +"> </TD> <TD class=AltLight align=left height="17">ServerD</TD> <TD class=AltLight align=left height="17">38048</TD> <TD class=AltLight align=left height="17">31,461</TD> <TD class=AltLight align=left height="17">51</TD> <TD class=AltLight align=left height="17">0</TD> <TD class=AltLight align=left height="17">0</TD> <TD class=AltLight align=left height="17">0</TD> <TD class=AltLight align=left height="17">2</TD> <TD class=AltLight align=left height="17">2</TD> <TD class=AltLight align=left nowrap height="17">24.14 MB</T +D> <TD class=AltLight align=left height="17">00:00:12</TD> <TD class=AltLight align=left height="17">1,946.00</TD> <TD class=AltLight align=left height="17">0%</TD> </TR> </TABLE> </DIV></TD> </TR></TABLE>
Output:
$VAR1 = [ { 'Actual Start' => undef, 'Node Name' => 'ServerB', 'Results' => undef, 'Schedule Name' => 'DAILYBACKUP_6PM', 'Schedule Start' => '2015-05-11-18.00', 'Domain Name' => 'ST10_DOMAIN', 'Status' => 'Missed' }, { 'Schedule Start' => '2015-05-11-18.00', 'Results' => undef, 'Domain Name' => 'ST13_DOMAIN', 'Schedule Name' => 'NJDLYBACKUP_6PM', 'Status' => 'Missed', 'Node Name' => 'ServerC', 'Actual Start' => undef } ];
(See emulate Python's range function for more information about the range() function included in the code.)
jeffa
L-LL-L--L-LL-L--L-LL-L-- -R--R-RR-R--R-RR-R--R-RR B--B--B--B--B--B--B--B-- H---H---H---H---H---H--- (the triplet paradiddle with high-hat)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^8: duplicate table with HTML::TreeBuilder look_down method
by mazdajai (Novice) on May 16, 2015 at 05:25 UTC |