1

我正在尝试使用 Perls HTML::TreeBuilder 从 HTML 页面中提取数据。我的选择器包括以下内容:

$root->look_down(_tag => 'div', class => 'member-search-results');

但是,div我正在寻找的有多个类,其中之一是member-search-results. 使用此代码,我无法找到div, 并且需要列出所有类才能成功匹配。

有什么办法可以让一个类包含对元素的搜索,以便代码也可以匹配如下标签:

<div class="CLASS1 member-search-results CLASS2">...</div>

我知道这应该有效:

$root->look_down(_tag => 'div', class => qr/member-search-results/);

但这是正确的方法还是有更好的方法?

谢谢

4

3 回答 3

2

请改用Web::Query。它的 CSS 选择器按照标准工作。

use Web::Query qw();
Web::Query
    ->new_from_html('<div class="CLASS1 member-search-results CLASS2">...</div>')
    ->find('div.member-search-results')
    ->text; # returns '...'
于 2013-03-10T09:01:18.150 回答
2

正如菲利普指出的那样,使用正则表达式方法可以获得预期的结果。具体来说,这是我使用的:

$tag = $tag->look_down(_tag => 'ol', class => qr/members/);
于 2013-03-10T14:55:00.530 回答
1

也许您需要将它们分开_tagclass分成单独look_down的 's(将它们链接在一起)。

我用:

$tree->look_down( id => 'mw-content-text' )->look_down( _tag => 'ul' );

https://github.com/pdurbin/scripts/blob/master/inthenews

于 2013-03-10T03:58:18.667 回答