aqu*_*ini 10 html perl html-parsing
我刚刚开始使用Perl,并编写了一个简单的脚本来进行Web抓取.我正在使用WWW :: Mechanize和HTML :: TreeBuilder完成大部分工作,但我遇到了一些麻烦.我有以下HTML:
<table class="winsTable">
<thead>...</thead>
<tbody>
<tr>
<td class = "wins">15</td>
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
我知道有些模块可以从表中获取数据,但这是一个特例; 并非我想要的所有数据都在表格中.所以,我尝试过:
my $tree = HTML::TreeBuilder->new_from_url( $url );
my @data = $tree->find('td class = "wins"');
Run Code Online (Sandbox Code Playgroud)
但是@data空了.我知道这个方法可以在没有类名的情况下工作,因为我已成功解析数据$tree->find('strong').那么,是否有一个模块可以处理这种类型的HTML语法?我浏览了HTML :: TreeBuilder文档并没有找到任何看似的内容,但我可能错了.
dms*_*dms 10
您可以使用该look_down方法查找您要查找的特定标记和属性.这是在HTML::Element模块中(由其导入HTML::TreeBuilder).
my $data = $tree->look_down(
_tag => 'td',
class => 'wins'
);
print $data->content_list, "\n" if $data; #prints '15' using the given HTML
$data = $tree->look_down(
_tag => 'td',
class => 'losses'
);
print $data->content_list, "\n" if $data; #prints nothing using the given HTML
Run Code Online (Sandbox Code Playgroud)
我使用优秀(但有时有点慢)HTML::TreeBuilder::XPath模块:
my $tree = HTML::TreeBuilder::XPath->new_from_content( $mech->content() );
my @data = $tree->findvalues('//table[ @class = "winsTable" ]//td[@class = "wins"]');
Run Code Online (Sandbox Code Playgroud)