Dee*_*pak 1 windows perl xpath cpan xml-libxml
我试图用来XPath提取一些HTML标签和数据,为此我需要使用XML::LibXML模块.
我尝试从CPAN shell安装它,但它没有安装.
我按照CPAN网站上有关安装的说明,我们需要安装libxml2,iconv以及zlib在安装之前的包装器XML::LibXML,它没有用完.
此外,如果还有其他更简单的模块可以完成我的任务,请告诉我.
手头的任务:
我<dd>在html页面上搜索特定的标签,这个标签非常大(大约5000 - 10000)<dd>和<dt>标签.所以,我正在编写一个匹配<dd>标记内容的脚本,并获取相应(下一个)<dt>标记内的内容.
我希望我能更清楚一点.任何帮助是极大的赞赏.
如果您使用的是ActiveState Perl,则应将ActivePerl 10xx Win32 PPM软件包中列出的存储库添加到ppm然后使用
ppm install XML::LibXML
尝试将HTML解析为XML通常不是一件令人愉快的事情.我认为HTML :: TokeParser更适合这项任务.
#!/usr/bin/perl
use strict;
use warnings;
use HTML::TokeParser;
my $p = HTML::TokeParser->new(\*DATA);
my @definitions;
while ( my $dl_tag = $p->get_tag('dl') ) {
while ( my $dt_tag = $p->get_tag('dt') ) {
my $term = $p->get_trimmed_text('/dt');
my $dd_tag = $p->get_tag('dd');
my $defn = $p->get_trimmed_text('/dd');
push @definitions, [$term, $defn];
}
}
use Data::Dumper;
print Dumper \@definitions;
__DATA__
<dl>
<dt>One</dt>
<dd>1</dd>
<dt>Two</dt>
<dd>2</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = [
[
'One',
'1'
],
[
'Two',
'2'
]
];