2015-01-04 5 views
-2

안녕하세요 웹 페이지에서 문자열을 검색하는 스크립트를 코딩하지만 요청 ... 난 이유를 모르겠어 작품많은 문제 :: 파서

웹 사이트를하지 않는 사람 : http://www.matrixx.com/ 문자열을 검색하기 : 솔루션

코드 :

#!/usr/bin/perl 
use strict; 
use IO::Socket; 
use Term::ANSIColor; 
use HTML::Parser; 
use LWP::UserAgent; 
use LWP::Simple; 
use vars qw($PROG); 

$SIG{'INT'} = sub {exit;}; 

my $stringsearch = "solutions"; 

my $url = "http://www.matrixx.com/"; 
my $ua = LWP::UserAgent->new; 
print "\e[96m[!]Searching \e[31m$url\n\e[0m";  
my $response = $ua->post($url); 
if (!$response->is_success) 
{ 
print "error\n"; 
} 


my $parser = HTML::Parser->new('text_h' => [ \&text_handler, 'dtext' ]); 
$parser->parse($response->decoded_content); 

sub text_handler 
{ 
    chomp(my $text = shift); 
    if ($text =~ /$stringsearch/i) 
    { 

     print "\e[96m[+]Found: \e[32m$url\e[0m\n"; 

    } 

    else 
    { 
     print "Not Found \n"; 
    } 
} 
+0

질문이다 "왜이 코드가 작동하지 않습니다" 주제 오프 stackoverflow. 코드에 관한 구체적인 코딩 질문을 요청해야합니다. 또한 디버깅 할 때 '경고 사용'이 필수적입니다. – TLP

+0

다른 사람들에게 글을 올릴 때, 내가 부분적으로하는 것처럼 잡음과 ** 들여 쓰기 코드 **를 불필요하게 제거하십시오. –

답변

1

text_handler은 페이지의 텍스트의 모든 조각을 요구한다. 실제로 검색 문자열을 찾지 만 그 중 하나에서만 찾을 수 있습니다. 다른 모든 인쇄물을 찾을 수 없습니다.

한 번만 URL 당 찾을 수 찾을하거나하지 인쇄하려면 다음을 수행하십시오이 답변으로 문제가 해결되지 않는 경우

my $found; 
my $text_handler = sub { 
    chomp(my $text = shift); 
    if ($text =~ /$stringsearch/i) { 
     $found = 1; 
    } 
}; 
my $parser = HTML::Parser->new('text_h' => [ $text_handler, 'dtext' ]); 
$parser->parse($response->decoded_content); 
if ($found) { 
    print "\e[96m[+]Found: \e[32m$url\e[0m\n"; 
} 
else { 
    print "Not Found\n"; 
} 

(당신이보고있는 방법이에 대한 자세한 명시하시기 바랍니다 당신이보고 기대 다르다) 꽤 몇 줄 &에서

3

를 사용 :. 유형의

#!/usr/bin/perl 
use strict; 
use LWP::UserAgent; 
use HTML::TreeBuilder::XPath; 

my $stringsearch = "solutions"; 

my $url = "http://www.matrixx.com/"; 
my $ua = LWP::UserAgent->new; 
my $response = $ua->get($url); 
die "Http error\n" unless $response->is_success; 

my $tree = HTML::TreeBuilder::XPath->new_from_content(
    $response->decoded_content 
); 

print "searched string found\n" if $tree->exists(
    "//*[contains(name(), '$stringsearch')] | //@*[contains(., '$stringsearch')]" 
); 
+0

POST는 순수 XPath 방식으로 편집하여 노드 이름과 속성 이름을 모두 검색합니다. –