在指定的div id之后总是得到第一个img而不是img?

时间:2013-09-06 22:24:00

标签: perl cgi screen-scraping

我正在创建一个基本的屏幕抓取工具并且已经成功完成但由于某种原因,这部分代码将无法获取预期的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'}");

上面的代码片段只打印src,找到它遇到的第一个图片标记,即徽标,而不是继续播放到漫画图片img。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我相信你需要

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

您要检查ID是否存在,然后再检查它是否不等于您指定的ID。您不能使用and,因为不存在的标记将为false并且会提前破坏您的循环。

这是我用来测试的文件。 id为1是指定的id:

<div id='2'>
<img src="NOPE" />
</div>
<div>
<img src="NOPE - 2" />
</div>
<div id='1'>
<img src="YEP" />
</div>