Извлечение таблицы HTML с помощью Perl
У меня есть следующая таблица:
<table cellpadding="4" cellspacing="0" border="0">
<tr>
<td>
<span class="label">Label1< /pan>
</td>
<td>
label1_value1
</td>
</tr>
<tr>
<td>
<span class="label">Label2</span>
</td>
<td>
Label2_value1 <br/>
Label2_value2 <br/>
</td>
</tr>
<tr valign="top">
<td>
<span class="label">Label3</span>
</td>
<td>
Result 1<br/>
Result 2<br/>
<span class="related"> -
Result 1 SP2<br/> </span>
</td>
<\tr>
</table>
Я хочу использовать HTML::TableExtract для извлечения этой таблицы
Я использую следующий код для извлечения таблицы:
$te->parse($table_content);
foreach my $row ($te->rows) {
if (defined($row->[1])) {
$row->[1]=~s/^\s+//gm;
$row->[1]=~s/\s+$/;/gm;
print $row->[1],"\n";
}
}
Я хочу результат в этом формате:
label1_value1,label1_value1;label1_value2,result1;result2-result3
но я получаю неправильные результаты, может кто-то помочь, что проблема с моим кодом или если есть возможность проанализировать пролеты с HTML::TableExtract
Я получаю следующее: label1_value1 Label2_value1 Label2_value2;
result1
result2
-
reuslt1;
1 ответ
Решение
Во-первых, в вашем HTML есть некоторые ошибки, такие как </pan>
а также <\tr>
и незамкнутый span
тег. Как только они исправлены, код
#!/usr/bin/env perl
use warnings; use strict;
use HTML::TableExtract;
my $te = HTML::TableExtract->new(
attribs => {
cellpadding => '4', cellspacing => '0', border => '0'
}
);
my ($table) = $te->parse(do { local $/; <DATA>} );
for my $row ( $table->rows ) {
for my $cell (@$row) {
$cell =~ s/^\s+//;
$cell =~ s/\s+\z/;/;
$cell =~ s/\s+/ /g;
}
print join("|", @$row), "\n";
}
дам тебе:
Label1; | label1_value1; Label2; | Label2_value1 Label2_value2; Label3; | Результат 1 Результат 2 - Результат 1 SP2;
Теперь я не знаю, какая логика приведет к тому, что вы получите желаемый результат:
label1_value1, label1_value1; label1_value2, результат1; результат2-result3
Не могли бы вы предоставить больше информации о том, что вы пытаетесь сделать?