【问题标题】:Perl HTML::TreeBuilder Class "Contains" ConditionPerl HTML::TreeBuilder 类“包含”条件
【发布时间】:2013-02-25 10:58:41
【问题描述】:

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

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

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

有什么方法可以对元素进行类 contains 搜索,以便代码也可以匹配以下标签:

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

我知道这应该可行:

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

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

谢谢

【问题讨论】:

  • qr 正则表达式解决方案看起来值得追求。

标签: perl html-parsing


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      我用:

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

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

      【讨论】:

      • 谢谢!但是,我无法理解这在这种情况下会有什么帮助?你能详细说明一下吗?
      • 啊,既然您已经编辑并澄清了您的问题,我理解得更好,我认为您是对的,我的示例可能对您的特定情况没有帮助。如果我的回答只是噪音,我可以帮你删除。
      • 其实好像可以用正则表达式:(attr_name, qr/.../) -- search.cpan.org/~cjm/HTML-Tree-5.03/lib/HTML/…
      猜你喜欢
      • 1970-01-01
      • 2011-07-28
      • 2012-01-23
      • 2011-02-26
      • 1970-01-01
      • 1970-01-01
      • 2011-09-13
      • 2013-06-06
      • 2014-08-25
      相关资源
      最近更新 更多