如何知道 Perl Mojo::DOM::find returns 或匹配任何 DOM 元素
How to know if Perl Mojo::DOM::find returns or matches any DOM Element
我目前正在用 Mojo::DOM
解析一系列网页,我继续浏览网页的唯一标准是是否在其中找到了一个元素。
我的 DOM 对象是这样构建的:
my $urlMJ = Mojo::URL->new($entry->link);
my $tx = $ua->get($urlMJ);
my $base = $tx->req->url;
my $dom = $tx->res->dom;
my $divVideo = $dom->find('div#searchforme');
我的问题是,我怎么知道 $divVideo
是否为空?
我从 SRI (Riedel) 回答的关于 google groups and grokbase 的这个问题中了解到,如果 find
不匹配任何元素,它 returns (如果我正确理解的话) ) DOM 对象集合启动 find
和一个空的 DOM 集合,这恰好是结果。
我想过使用 each
来获取其中的空 DOM 集合,但是 DOM returned 不会包含初始的 DOM 结构?
我试过用if (defined($divVideo))
,我也试过用print Dumper($divVideo)
转储。所有 returned 都是 $VAR1 = bless( [], 'Mojo::Collection' );
我试过 $dom->find('div#searchforme')->size
, return 值是 0
甚至对于那些不属于这一类别的网页也是如此。
有人可以帮帮我吗?
我的做法是错误的吗?
if find doesn't match any element, it returns (if I get it correctly) the DOM object collection initiating the find and an empty DOM collection, which happens to be the result.
你误会了find
。它 returns 只是 Mojo::Collection
个 Mojo::DOM
个对象,代表页面中的每个匹配元素。没有其他的。因此,如果没有找到匹配项,则只返回一个空集合
这个对象有一个size
方法,所以你可以说
my $divColln = $dom->find('div#searchforme');
if ( $divColln->size > 0 ) {
...
}
或者,您可以使用 each
方法将集合转换为列表,然后将其分配给这样的数组
my @divColln = $dom->find('div#searchforme')->each;
if ( @divColln ) {
...
}
或者如果您希望只找到 一个 这样的元素(看起来您正在这里做),那么您可以从集合中选择第一项,例如这个
my $divVideo = $dom->find('div#searchforme')->[0];
if ( $divVideo ) {
...
}
我目前正在用 Mojo::DOM
解析一系列网页,我继续浏览网页的唯一标准是是否在其中找到了一个元素。
我的 DOM 对象是这样构建的:
my $urlMJ = Mojo::URL->new($entry->link);
my $tx = $ua->get($urlMJ);
my $base = $tx->req->url;
my $dom = $tx->res->dom;
my $divVideo = $dom->find('div#searchforme');
我的问题是,我怎么知道 $divVideo
是否为空?
我从 SRI (Riedel) 回答的关于 google groups and grokbase 的这个问题中了解到,如果 find
不匹配任何元素,它 returns (如果我正确理解的话) ) DOM 对象集合启动 find
和一个空的 DOM 集合,这恰好是结果。
我想过使用 each
来获取其中的空 DOM 集合,但是 DOM returned 不会包含初始的 DOM 结构?
我试过用if (defined($divVideo))
,我也试过用print Dumper($divVideo)
转储。所有 returned 都是 $VAR1 = bless( [], 'Mojo::Collection' );
我试过 $dom->find('div#searchforme')->size
, return 值是 0
甚至对于那些不属于这一类别的网页也是如此。
有人可以帮帮我吗?
我的做法是错误的吗?
if find doesn't match any element, it returns (if I get it correctly) the DOM object collection initiating the find and an empty DOM collection, which happens to be the result.
你误会了find
。它 returns 只是 Mojo::Collection
个 Mojo::DOM
个对象,代表页面中的每个匹配元素。没有其他的。因此,如果没有找到匹配项,则只返回一个空集合
这个对象有一个size
方法,所以你可以说
my $divColln = $dom->find('div#searchforme');
if ( $divColln->size > 0 ) {
...
}
或者,您可以使用 each
方法将集合转换为列表,然后将其分配给这样的数组
my @divColln = $dom->find('div#searchforme')->each;
if ( @divColln ) {
...
}
或者如果您希望只找到 一个 这样的元素(看起来您正在这里做),那么您可以从集合中选择第一项,例如这个
my $divVideo = $dom->find('div#searchforme')->[0];
if ( $divVideo ) {
...
}