如何根据类提取HTML元素?

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)


gan*_*ass 6

我使用优秀(但有时有点慢)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)