私の質問のタイトルはそれほど説明的ではないことはわかっていますが、ここで説明させてください。
HTML::TreeBuilder を使用して、指定されたhtml ドキュメントを解析しようとしています。このHTMLドキュメントの値5,1,ABC,DEF
は、ユーザーが指定した値に対して検証され、その検証が成功した場合はhref
リンクを抽出する必要があります。
だから、私のコードは次のとおりです。
my @tag = $tree->look_down( _tag => 'tr', class => qr{\bepeven\scompleted\b} );
for (@tag) {
query_element($_);
}
sub query_element {
my @td_tag = $_[0]->look_down( _tag => 'td' );
my $num1 = shift @td_tag; #Get the first td tag
my $num2 = shift @td_tag; # Get the second td tag
#Making sure first/second td tag has numeric value
$num1 = $1 if $num1->as_text =~ m!(\d+)! or die "no match found";
$num2 = $1 if $num2->as_text =~ m!(\d+)! or die "no match found";
#Validating that above value's match the user provided value 5 and 1.
if ( $num1 eq '5' && $num2 eq '1' ) {
say "hurray..!!";
#Iterating over rest of the td tag to make sure we get the right link from it.
for (@td_tag) {
#Check if contains ABC and than procede to fetch the download href link.
if ($_->look_down(_tag => 'td', class => qr{[c]}, sub {
$_[0]->as_text eq 'ABC';} )
)
{
my $text = $_->as_text;
say "Current node text is: ", $text; #outputs ABC
#Now from here how do I get the link I want to extract.
}
}
}
}
さて、私のアプローチは、最初に値を抽出し、td tags
それが成功した場合はユーザーが指定した値と照合し、別のユーザーが指定した値を探すよりもABC or DEF
、私の場合はリンクのみを抽出するよりもABC
一致した場合です。
現在、タグを含むタグABC or DEF
の位置は固定されていませんが、5 and 1
値を含むタグの下になります。それで、私$_[0]->as_text eq 'ABC';
はタグがABC
ツリーに含まれていることを確認していました。現在、text node
ここからABCにいます。リンクhrefを抽出するにはどうすればよいですか。オブジェクトツリーを上に移動して値を抽出するにはどうすればよいですか。
PS: ここで xpath を試してみましたが、html 要素の位置が明確に定義されておらず、構造化されていません。
編集:
それで、私は試し$_->tag()
て戻ってきtd
ましたが、次のコードが機能しない理由よりも td タグを使用している場合:
my $link_obj = $_->look_down(_tag => 'a') # It should look for `a` tag.
say $link_obj->as_text;
しかし、次のエラーが発生します。
Can't call method "as_text" on an undefined value.