Html 如何知道Perl Mojo::DOM::find是否返回或匹配任何DOM元素
我目前正在用解析一系列的网页,我要继续往下分析网页的唯一标准是是否在其中找到了元素 我的DOM对象是这样构建的:Html 如何知道Perl Mojo::DOM::find是否返回或匹配任何DOM元素,html,perl,dom,mojolicious,Html,Perl,Dom,Mojolicious,我目前正在用解析一系列的网页,我要继续往下分析网页的唯一标准是是否在其中找到了元素 我的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'); 我的
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)回答的这个问题来看,如果find
与任何元素都不匹配,它将返回(如果我正确获得)启动find
的DOM对象集合和一个空DOM集合,这恰好是结果
我曾想过使用each
访问其中的空DOM集合,但返回的DOM不包含初始DOM结构吗
我尝试过使用if(defined($divVideo))
,也尝试过使用打印转储程序($divVideo)
转储。它返回的是$VAR1=bless([],'Mojo::Collection')代码>
我尝试了$dom->find('div#searchforme')->size
,返回值为0
,甚至对于不属于此类别的网页也是如此
谁能帮帮我吗
我的方法错了吗
如果find与任何元素都不匹配,它将返回(如果我正确获得它的话)启动find的DOM对象集合和一个空的DOM集合,这恰好是结果
你误解了查找。它只返回一组表示页面中每个匹配元素的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 ) {
...
}
或者,如果您希望只找到一个这样的元素(看起来您正在这样做),那么您可以从集合中选择第一项,如下所示
my @divColln = $dom->find('div#searchforme')->each;
if ( @divColln ) {
...
}
my $divVideo = $dom->find('div#searchforme')->[0];
if ( $divVideo ) {
...
}
感谢@Borodin的快速响应。我打印了一个$divVideo->size
,但它都返回了一个0
值,即使是所有包含元素的网页,那么要么是选择器错误,要么是HTML错误div#searchforme
查找类似
的元素。您是否打算使用div.searchforme
?也可能部分页面是使用JavaScript构建的,而Mojo::UserAgent
不支持这一点。尝试打印$dom->to_string
以查看HTML是否是您认为正确的@Borodin,页面部分是用javascript构建的,当Mojo::UserAgent获取页面时,这些元素尚未写入。那么我将使用另一种方法。实际上是一个部门id。非常感谢你。