2012-05-16 77 views
0

如何檢查頁面是否包含特定單詞。例如:如果頁面包含單詞「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!"; 
} 
+1

當你運行這個時會發生什麼? – Ilion

+0

這將是一個好主意,首先檢查您的請求是否成功,並獲得您期望的內容。 – ArtM

+0

對我來說這似乎很好,除了你在程序的頭部缺少'strict strict'和'use warnings'外。 (在請求幫助之前包括這兩個都是有禮貌的。)我還建議在'get'調用之後定義一行'定義$ simplePage或死掉「無法獲取URL」。這個程序出了什麼問題? – Borodin

回答

1

我建議你使用某種解析器,如果你正在尋找用於HTML中的文字或以已知方式標記的任何其他文件[例如XML]。我使用HTML :: Tokeparser,但CPAN上有許多解析模塊。

如果您使用此解析器,我已經將解析器返回的解釋留作評論。這是從我用來在網頁上翻譯文本的實時程序中提取的,所以我已經拿出了一些零碎的東西。

以上有關檢查LWP返回狀態和內容的註釋非常明智,如果網站是脫機的,您需要知道這一點。

open(my $ fh,「<:utf8」,$ 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/) { 

    } 
相關問題