2

私はこれを解決しました: WWW::Mechanize でロードしていたページは、AJAX を使用して内部のすべてのコンテンツをロードする<tbody>ため、$html 変数を作成したときにロードされません。次に、この動的コンテンツを取得する方法を確認する必要があります...


Web ページのテーブルのコンテンツを解析しようとしています。にはと<table>が含まれます。テーブルの一部からコンテンツを取得しようとすると、そこに何もないことがわかります。内にあるコンテンツのみを取得します。<thead><tbody><tbody><thead>

次のようにいくつかの異なる方法を試しましたが、<tbody>.

HTML::TreeBuilder の使用

my $tb = HTML::TreeBuilder->new();
$tb->parse($html);
my $table = $tb->look_down( _tag => 'tbody', id => 'tbody-id' );

HTML::TableExtract の使用

my $te = HTML::TableExtract->new( attribs => { id => 'table-id' } );
$te->parse($html);
my $table=$te->first_table_found;

テーブルのを実行しようとすると、print Dumper($table);を見つけて、<table>内のテーブル コンテンツ<thead>または<tbody>からのすべてのコンテンツを含むその親への参照のみを表示できることを示しています<thead>

のコンテンツについてはあまり気にしません。<thead>のテーブル コンテンツが必要なだけです<tbody>

何が間違っているのか、ここからどこへ行けばよいのかわかりません。

4

1 に答える 1

1

HTMLは有効ですか?タグの 1 つを適切に閉じていなかったため、次のコードが機能するまでに数分かかりました。

use strict;
use warnings;

use HTML::TreeBuilder;
use Perl6::Say;

my $html = << 'HTML';
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>title</title>
        <link rel="stylesheet" href="style.css">
        <script src="script.js"></script>
    </head>
    <body>
        <table>
            <caption>Caption</caption>
            <thead>
                <tr>
                    <th>Header</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Body</td>
                </tr>
            </tbody>
        </table>
    </body>
</html>
HTML

my $tree    = HTML::TreeBuilder->new->parse_content($html);
my $table   = $tree->look_down('_tag', 'table');
my $caption = $table->look_down('_tag', 'caption');
my $thead   = $table->look_down('_tag', 'thead');
my $tbody   = $table->look_down('_tag', 'tbody');

say $caption->as_HTML;
# <caption>Caption</caption>

say $thead->as_HTML;
# <thead><tr><th>Header</th></tr></thead>

say $tbody->as_HTML;
# <tbody><tr><td>Body</td></tr></tbody>
于 2014-02-10T23:59:29.197 に答える