1

HTML ページの特定のテーブル セルにあるテキストを抽出したいと考えています。

問題は、このセルが ID/名前のないテーブル タグ内に存在することです。

HTML::TreeBuilder::XPath を使用して、XPATH 式を使用して値を抽出しています。

HTML コンテンツは次のようになります。

<table border="0">
<tr>
<td>Some Text</td>
<td>The Text I want comes here</td>
</tr>

これは私のXPATH式がどのように見えるかです:

@nodes=$tree->findnodes(q{//table[8]/tr/td[2]/text()});
print $_->string_value."\n" foreach(@nodes); # corrected, thanks mirod.

出力は表示されません。

上記の table[8] を使用しました。これは、HTML ページの 8 つのテーブル タグであるためです (インデックスが 1 から始まると仮定)。

また、2 番目の td タグの間に innerHTML が必要なので、td[2] を使用しました。

ありがとう。

4

2 に答える 2

3

text()XPath クエリの末尾にあるを削除するとどうなりますか? string_valuetd 自体を呼び出すだけで十分だと思います。

また、メソッド呼び出しは文字列に補間されないため、 と記述する必要がありますprint $_->string_value, "\n"

ただし、これにより、マークアップではなく、コンテンツのテキストが得られます。as_HTMLそのためには、 を使用して外側のタグを削除する必要があります (HTML::Element には、内側の HTML を提供するメソッドはありません)。

#!/usr/bin/perl

use strict;
use warnings;

use HTML::TreeBuilder::XPath;

my $tree= HTML::TreeBuilder::XPath->new_from_content( <DATA>);

my @nodes=$tree->findnodes(q{//table[1]/tr/td[2]});
print $_->string_value, "\n" foreach(@nodes); # text
print $_->as_HTML, "\n" foreach(@nodes);      # outerHTML



__DATA__
<html>
<body>
<table border="0">
<tr>
<td>Some Text</td>
<td>The Text I want comes here with <b>nested</b> content</td>
</tr>
</body>
</html>
于 2012-08-15T09:21:05.950 に答える
1

mirod アプローチがうまくいくはずです。

ただし、テキスト コンテンツが必要な場合はfindvalues代わりに使用することをお勧めします。findnodes

このコードを実行して、出力を表示してみてください:

my @values=$tree->findvalues(q{//table[8]//tr[1]//td});
print $_, "\n" foreach(@values);
于 2012-08-15T14:45:31.200 に答える