I like HTML::TokeParser a lot, but I LOOOOVE
HTML::TokeParser::Simple, so here is an example (cause the others toted such memory hogs as HTML::TreeBuilder, and HTML::Parser doesn't fit for this task)
#!/usr/bin/perl
use strict;
use warnings;
use HTML::TokeParser::Simple; # friendlier tokens
use LWP::Simple;
my $html = get("http://pvpgnservers.ath.cx");
=head1 MY Test HTML
The "TH" is the 1st trimmeg, so we gotta "seek" to it.
Next is a check, to make sure there is a link to index_address.html
And if that passes, it means the html ain't changed significantly, so
LOOOOOOOOOOOOOOOP
while we got TR's {
eat a TD and get_trimmed_text 8 times in a row
}
my $html = q{<tr>
<th bgcolor="#808080"><a href="index_adress.html">
+<font size=2>Address</font></a></th>
<th bgcolor="#808080"><a href="index_description.h
+tml"><font size=2>Description/URL</font></a></th>
<th bgcolor="#808080"><a href="index_location.html
+"><font size=2>Location</font></a></th>
<th bgcolor="#808080"><a href="index_uptime.html">
+<font size=2>Uptime</font></a></th>
<th bgcolor="#808080"><a href="index_contact.html"
+><font size=2>Contact</font></a></th>
<th bgcolor="#808080"><a href="index_software.html
+"><font size=2>Software</font></a></th>
<th bgcolor="#808080"><a href="index_users.html"><
+font size=2>Users</font></a></th>
<th bgcolor="#808080"><a href="index_games.html"><
+font size=2>Games</font></a></th>
</tr>
<tr>
<td><font size=1><a href="bnetd://211.62.58.113/">
+211.62.58.113</a></font></td>
<td><a target="_blank" href="unknown"><font size=1
+>unknown</font></a></td>
<td><font size=1>unknown</font></td>
<td align=right><font size=1>0d 03:26</font></td>
<td><font size=1><a href="mailto:unknown">a PvPGN
+user</a></font></td>
<td><font size=1>PvPGN BnetD Mod 1.1.6 Linux<
+/font></td>
<td align=right><font size=1>1158</font></td>
<td align=right><font size=1>320</font></td>
</tr>
};
=cut
my $p = new HTML::TokeParser::Simple(\$html);
$p->get_tag('th') or die "crap";
die "change code, stuff changed"
unless
$p->get_tag('a')->return_attr->{href} =~ /index_adress.html/i;
while( my $t = $p->get_tag('tr') ) {
for(1..8){
$p->get_tag('td'); # cause the next token ain't "text"
print $p->get_trimmed_text('/td')."\n";
}
}
Here are some other examples of HTML::TokeParser and/or HTML::TokeParser::Simple usage.
You can get even more by using super search to look
for "use HTML::TokeParser" within text.
Re: Requesting webpages which use cookies and session ids. (rev)
What holiday is today? <!-- googleholiday.pl -->
(crazyinsomniac) Re: Getting the Linking Text from a page
(crazyinsomniac) Re: Is this the best way to use HTML::TreeBuilder to bold text in an HTML document?
download code from scratchpad
HTML::TokeParser token dumper
(crazyinsomniac) Re: HTML Link Modifier
Re: Re: (crazyinsomniac) Re: Extract info from HTML
(crazyinsomniac) Re: Extract info from HTML
(crazyinsomniac) Re: parsing HTML
Re: Parsing HTML tags with regex
____________________________________________________
** The Third rule of perl club is a statement of fact: pod is sexy.
Edit by tye to remove PRE tags around very long lines