2015-06-17 4 views
1

Я пытаюсь извлечь объект (между тегами h3) в следующем примере, используя Web :: Query. Найти 'h3' возвращает текст автора, но вместо этого я хочу h3 в классе темы. Я попробовал .subject.div.h3, но он возвращает undef.Как извлечь текст из HTML-документа с помощью Web :: Query

#!/usr/bin/perl 

use strict; 
use warnings; 
use Web::Query; # libweb-query-perl 
use Data::Dumper; 

my $testhtml =' 
<html><head></head> 
<body> 
    <div class="author" 
     <div><h3>Neil Watson</h3></div> 
    </div> 
    <div class="subject"> 
     <div><h3>@if version_after macro is illogical</h3></div> 
    </div> 
</body> 
</html> 
'; 

my $parts = Web::Query->new_from_html($testhtml); 
my $subject = $parts->find('div.subject.div.h3')->text; 

print "subjectfinal ".Dumper($subject); 

ответ

2

Точечный селектор обозначает выбор классов, который не является тем, что вы планируете использовать для второго div и h3. Для этого вам нужен потомок. Правильный синтаксис:

my $subject = $parts->find('div.subject > div > h3')->text; 

# Which outputs 
# subjectfinal $VAR1 = '@if version_after macro is illogical'; 

Для получения дополнительной информации о CSS селекторов, который является то, что Web :: Query навеян от взглянуть на http://www.w3schools.com/cssref/css_selectors.asp