Perl HTML::TreeBuilder 类的 "包含" 条件

3
我想使用Perl的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/);

但这是否是正确的做法,或者是否有更好的方法呢?

谢谢。


1
qr 正则表达式解决方案看起来值得追求。 - Philip Durbin
3个回答

3
请使用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 '...'

3

正如Philip所指出的那样,使用正则表达式方法可以得到所需的结果。具体来说,我使用了以下内容:

$tag = $tag->look_down(_tag => 'ol', class => qr/members/);

1

谢谢!但是,我不明白这怎么能帮助解决这个问题?您能详细说明一下吗? - Jibran
啊,现在你编辑并澄清了你的问题,我更好地理解了,并且我认为你是正确的,我的例子可能对你的特定情况没有帮助。如果我的回答只是噪音,我可以为你删除它。 - Philip Durbin
2
实际上,看起来你可以使用正则表达式:(attr_name, qr/.../) -- http://search.cpan.org/~cjm/HTML-Tree-5.03/lib/HTML/Element.pm#look_down - Philip Durbin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接