Perl HTML::Класс TreeBuilder содержит условие

Я пытаюсь использовать 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/);

Но это правильный способ сделать это или есть лучший метод?

Спасибо


person Jibran    schedule 10.03.2013    source источник
comment
Решение регулярного выражения qr выглядит так, как будто оно того стоит.   -  person Philip Durbin    schedule 10.03.2013


Ответы (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 '...'
person daxim    schedule 10.03.2013

Как указал Филипп, использование метода регулярных выражений дает желаемые результаты. В частности, вот что я использовал:

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

Возможно, вам нужно разделить _tag и class на отдельные look_down (связать их вместе).

Я использую:

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

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

person Philip Durbin    schedule 10.03.2013
comment
Спасибо! Однако я не могу понять, как это поможет в этой ситуации? Не могли бы вы немного уточнить? - person Jibran; 10.03.2013
comment
Ах, теперь, когда вы отредактировали и уточнили свой вопрос, я лучше понимаю и думаю, что вы правы в том, что мой пример может не помочь в вашей конкретной ситуации. Если мой ответ - просто шум, я могу удалить его для вас. - person Philip Durbin; 10.03.2013
comment
На самом деле похоже, что вы можете использовать регулярное выражение: (attr_name, qr/.../) -- search.cpan.org/~cjm/HTML-Tree-5.03/lib/HTML/ - person Philip Durbin; 10.03.2013