如何检查网页是否包含特定字词。示例:如果页面包含单词“candybar”,我想返回true或false。请注意,“candybar”可能位于标签(candybar)之间,有时也可能不在。我该如何做到这一点?
这是我的“抓取”网站的代码(现在不知道如何检查网站):
#!/usr/bin/perl -w
use utf8;
use RPC::XML;
use RPC::XML::Client;
use Data::Dumper;
use Encode;
use Time::HiRes qw(usleep);
print "Content-type:text/html\n\n";
use LWP::Simple;
$pageURL = "http://example.com";
$simplePage=get($pageURL);
if ($simplePage =~ m/candybar/) {
print "its there!";
}
答案 0 :(得分:1)
我建议您使用某种解析器,如果您正在寻找HTML中的单词或以已知方式标记的任何其他内容[例如,XML]。我使用HTML :: Tokeparser,但CPAN上有很多解析模块。
如果您使用此解析器,我已将解析器返回的解释留作注释。这是从我用来机器翻译网页中的文本的实时程序中提取的,所以我已经取出了一些零碎的东西。
以上关于检查LWP退货状态和内容的评论也是非常明智的,如果网站脱机,您需要知道。
打开(我的$ fh,“<:utf8”,$ file)||死“无法打开$ file:$!”;
my $p = HTML::TokeParser->new($fh) || die "Can't open: $!";
$p->empty_element_tags(1); # configure its behaviour
# put output into here and it's cumulated
while ( my $token = $p->get_token ) {
#["S", $tag, $attr, $attrseq, $text]
#["E", $tag, $text]
#["T", $text, $is_data]
#["C", $text]
#["D", $text]
#["PI", $token0, $text
my ($type,$string) = get_output($token) ;
# ["T", $text, $is_data] : rule for text
if ( $type eq 'T' && $string =~ /^candybar/ ) {
}