2012-04-06 2 views
0

У меня есть следующий код для доступа к таблице HTML.Форматирование текста веб-искателя

my $table = $tree->look_down(_tag => "table", id => "moduleDetail"); 

однако текст сходящий не отформатирован, потому что веб-страница использует таблицы границ разделить определенные части текста. Таким образом, это происходит примерно так: «математика для вычисления Jordanstown» с jordanstown, которую я предполагаю в следующей ячейке. вот код, который я использую,

my @array; 
my $tree = HTML::TreeBuilder->new_from_content($mech->content); 
my $table = $tree->look_down(_tag => "table", id => "moduleDetail"); 




    for ($table ->look_down(_tag => 'tr')) { 

       push(@array,$_->as_text()); 

    } 

    foreach(@array){ 
      print $_, " "; 
        } 
$tree->delete(); 

Примечание: Я попытался отделить текст, используя и массив, но не повезло? любые указатели. Благодаря

+0

Можете ли вы показать нам текст ввода? –

ответ

0

Использование HTML :: TreeBuilder :: XPath

Я предлагаю использовать модуль Perl HTML::TreeBuilder::XPath для этого. Он должен дать вам именно то, что вы хотите.

Из документации, я считаю, что ваш код будет выглядеть следующим образом, используя модуль

my $tree = HTML::TreeBuilder::XPath->new_from_content($mech->content); 
my @trArray = $tree->findnodes_as_string('//table[@id="moduleDetail"]/tr/td'); 
$tree->delete(); 

XPath Для получения дополнительной информации о XPath см http://www.w3schools.com/xpath/.

Использование HTML :: TreeBuilder

Если вы хотите придерживаться с помощью HTML::TreeBuilder, то вам нужно будет сделать следующее

my $tree = HTML::TreeBuilder->new_from_content($mech->content); 
my $table = $tree->look_down(_tag => "table", id => "moduleDetail"); 
for ($table->look_down(_tag => 'td')) { 
    push(@array,$_->as_text()); 
} 
+0

Что такое Xpath, как я могу его использовать? – aspiringCoder

+0

Следуйте по ссылке, которую я предоставил. Вы устанавливаете его так же, как HTML :: TreeBuilder, и используете его аналогичным образом. –

+0

ОК, я вижу, что это делает, но мне нужно посмотреть в родительском теге, но остановить его от доступа к дочернему элементу, например tr может иметь тег внутри id call small? – aspiringCoder

1

Доступ текстовые узлы HTML дерева становится намного проще если вы вызываете метод objectify_text на дереве. Это изменяет текстовые узлы от простых строк до экземпляров HTML::Element с псевдонимным тегом ~text и атрибутом text, равным текстовой строке. Это позволяет методу look_down искать текстовые узлы.

Если вы так перекодируете, вы получите значение каждого отдельного текстового узла, надавленного на массив.

my $tree = HTML::TreeBuilder->new_from_content($mech->content); 
$tree->objectify_text; 

my $table = $tree->look_down(_tag => "table", id => "moduleDetail"); 

my @text; 

for my $tr ($table->look_down(_tag => '~text')) { 
    my $text = $tr->attr('text'); 
    push @text, $text if $text =~ /\S/; 
} 

print "$_\n" for @text;