Документация HTML :: TableExtract гласит, что глубина, число, строка, столбец начинается с 0
.
Следующий код представляет собой остов кода с предположением, что все html файлы будут храниться в одном каталоге.
С помощью glob получаем имена html файлов.
Затем мы пишем подпрограмму extract_table_cell
, в которую передаем параметры depth,count,row,col
для извлечения данных, расположенных в этой позиции.
Теперь для каждого имени файла мы вызываем подпрограмму extract_table_cell
и сохраняем возвращаемые данные в массив @data
.
Также мы пишем подпрограмму gen_html
, которая ссылается на массив @data
и возвращает html код, представляющий эти данные.
At эту точку мы называем скажем с подпрограммой gen_html
в качестве аргумента для вывода результата.
ПРИМЕЧАНИЕ: вам потребуется изменить подпрограмму extract_table_cell
для достижения желаемого формата данных ячейки
use strict;
use warnings;
use feature 'say';
use HTML::TableExtract;
my($depth,$table,$row,$col) = (0,1,0,1);
my @data;
for (glob("*.html")) {
push @data, extract_table_cell($_,$depth,$table,$row,$col);
}
say gen_html(\@data);
sub gen_html {
my $data = shift;
my($html,$block);
for ( @{$data} ) {
$block .= "\t\t$_\n";
}
$html =
"
<html>
<head>
</head>
<body>
$block
</body>
</html>
";
return $html;
}
sub extract_table_cell {
my($file,$depth,$count,$row,$col) = @_;
my $te = HTML::TableExtract->new( depth => $depth, count => $count );
$te->parse_file($file);
my $table = $te->first_table_found;
return ${ $table->{grid}[$row][$col] };
}
Выход
<html>
<head>
</head>
<body>
B 1.2
D 1.2
</body>
</html>
Файлы тестовых данных:
table_1. html
<html>
<head>
</head>
<body>
<table>
<tr><td>A 1.1</td><td>A 1.2</td><td>A 1.3</td></tr>
<tr><td>A 2.1</td><td>A 2.2</td><td>A 2.3</td></tr>
<tr><td>A 3.1</td><td>A 3.2</td><td>A 3.3</td></tr>
<tr><td>A 4.1</td><td>A 4.2</td><td>A 4.3</td></tr>
</table>
<table>
<tr><td>B 1.1</td><td>B 1.2</td><td>B 1.3</td></tr>
<tr><td>B 2.1</td><td>B 2.2</td><td>B 2.3</td></tr>
<tr><td>B 3.1</td><td>B 3.2</td><td>B 3.3</td></tr>
<tr><td>B 4.1</td><td>B 4.2</td><td>B 4.3</td></tr>
</table>
</body>
</html>
table_2. html
<html>
<head>
</head>
<body>
<table>
<tr><td>C 1.1</td><td>C 1.2</td><td>C 1.3</td></tr>
<tr><td>C 2.1</td><td>C 2.2</td><td>C 2.3</td></tr>
<tr><td>C 3.1</td><td>C 3.2</td><td>C 3.3</td></tr>
<tr><td>C 4.1</td><td>C 4.2</td><td>C 4.3</td></tr>
</table>
<table>
<tr><td>D 1.1</td><td>D 1.2</td><td>D 1.3</td></tr>
<tr><td>D 2.1</td><td>D 2.2</td><td>D 2.3</td></tr>
<tr><td>D 3.1</td><td>D 3.2</td><td>D 3.3</td></tr>
<tr><td>D 4.1</td><td>D 4.2</td><td>D 4.3</td></tr>
</table>
</body>
</html>