0

私は基本的なスクリーン スクレーパーを作成しており、正常に完了しましたが、何らかの理由でコードのこの部分が目的の img タグを取得できません。指定された id の div の後に img src を取得しようとしていますが、スクリプトはページの最初の img タグを取得しています。たとえば、このサンプル コミック スクレーパー

$agent->get("http://www.blondie.com/todays_strip/");
$stream = HTML::TokeParser->new(\$agent->{content});

$tag = $stream->get_tag("div");

while ($tag->[1]{id} and $tag->[1]{id} ne 'comicpanel') {
    $tag = $stream->get_tag("div");
}

my $blondie_comic = $stream->get_tag("img");

print $cgi->h1("$blondie_comic->[1]{'src'}");

上記のスニペットは、コミック ストリップの img に進むのではなく、最初に見つかったイメージ タグであるロゴの src を出力するだけです。

前もって感謝します。

4

1 に答える 1

0

私はあなたが必要だと信じています

while (not exists $tag->[1]{id} or $tag->[1]{id} ne '<specified-id>') {
  $tag = $stream->get_tag("div");
}

指定したIDと等しくないかどうかを確認する前に、IDが存在するかどうかを確認します。and存在しないタグは false になり、ループを早期に中断するため、使用できません。

テストに使用したファイルは次のとおりです。1 の id は、指定された id です。

<div id='2'>
<img src="NOPE" />
</div>
<div>
<img src="NOPE - 2" />
</div>
<div id='1'>
<img src="YEP" />
</div>
于 2013-09-06T23:22:18.067 に答える