Perlスクリプトを使用したHTMLデータの抽出

Perlスクリプトを使用したHTMLデータの抽出

ヘッダーの下の一部のデータを抽出するコードは次のとおりですItem Drop%90.5%そのタイトルの下のコンテンツを抽出したいと思います。ただし、値だけでなく列全体のみを抽出できます。どんなアイデアがありますか?

#!/usr/bin/perl

use strict;
use warnings;

use HTML::TableExtract;
use LWP::Simple;

my $file = 'data.html';
unless ( -e $file ) {
    my $rc = getstore(
        'proj/Desktop/folder1/data.html',
        $file);
    die "Failed to download document\n" unless $rc == 200;
}



my $te = HTML::TableExtract->new( headers => qw(Item Drop%)]);

$te->parse_file($file);

my ($table) = $te->tables;

foreach my $ts (ts->tables) {
    print "Table (", join(',', $ts->coords), ");\n";
    foreach my $row ($ts->rows) {
        print join(',', @$row), "\n";
    }
}

data.htmlのもの:


 ..
 ..
 ..
<table align = "center" class="" style= .......>
<tr>
<th rowspan="2">EM</th>
<th colspan="2"><a href= "proj/Desktop/folder1/data.html" class = ..../th>
<td> 90.5%</td>
</tr>
..
..
..
..
<tr>
<th rowspan="2">EM</th>
<th colspan="2"><a href= "proj/Desktop/folder1/data.html" class = ..../th>
<td> 40%</td>
</tr>

</table>

答え1

私の意見はほとんどの場合、これはすべての言語でHTMLをスクラップするより良い方法であり、テーブルに限定されません。真珠HTML::TreeBuilder::XPath必需品であり、価値を簡単に得ることができます。以下を確認してください。

#!/usr/bin/env perl
use strict; use warnings;
use HTML::TreeBuilder::XPath;

my $tree = HTML::TreeBuilder::XPath->new;
$tree->parse_file("./data.html");
print [$tree->findvalues('//table//td[contains(text(), "%")')]->[0];

出力

90.5%

関連情報