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'}");

上面的代码片段只是打印它遇到的第一个图像标签的 src,标志,而不是继续到漫画 img。

提前致谢。

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,因为不存在的标签将是错误的并且会提前中断您的循环。

这是我用来测试的文件。id 为 1 是指定的 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 回答