2010-07-06 3 views
0

Я делаю скрипт, который входит на страницу, извлекает и извлекает из нее информацию. Сценарий, который я делаю в Perl.извлечение текста из HTML (Perl)

Проблема: Не, как начать работать сценарий, потому что, когда я начинаю его подхватывает URL, как это и это не то, что я хочу

<a href="http://valeptr.com/scripts/runner.php?BA=6672&amp;hash=08c5c66839a468a11b7574e6ce02e0&amp;url=http%3A%2F%2Fdizzydollarsgpt.com%2Fmembers%2Fregister.php%3Fref%3Dthomasd24" target="_blank"><img alt="DizzyDollarsGPT" border="0" src="enter.php_files/runner.jpeg" /></a>

И я хочу получить это:

<a href="http://valeptr.com/scripts/runner.php?PA=33425" target="_ptc" onclick="javascript:reloadpage(11)"> <img src="1appsearch.php_files/runner_007.gif" alt="Xray-cash" border="0">

Полностью кода здесь:

#!/usr/bin/perl 
#======================================================================= 
# 
# FILE: ValePTR.pl 
# 
# USAGE: ./ValePTR.pl user password 
# 
# DESCRIPTION: 
# 
# OPTIONS: --- 
# REQUIREMENTS: libgetopt-declare-perl 
# BUGS: --- 
# NOTAS: --- 
# AUTOR: Alejandro 
# VERSION: 1.0 
# CREATED: Lunes 5 de julio del 2010 
# REVISION: 1 
#======================================================================= 

use warnings; 
use strict; 
use HTML::TreeBuilder; 
use WWW::Mechanize; 
use Getopt::Long; 
my($content, $search_result, @search_results); 

    #Constructor del explorador con un UserAgent falso. 
    my $Explorador = WWW::Mechanize->new(agent => 'Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624'); 
    $Explorador->get("file://home/alejandro/enter.php.html"); #Se procede a acceder a la dirección url para hacer el HTTP Post 
    #$Explorador->field('username','miuser'); # Busca el campo username y pone el usuario 
    #$Explorador->field('password','mipass'); # Busca el campo password y pone la contraseña 
    #$Explorador->submit(); # Hace el HTTP POST 

     #print $Explorador->content(); 
#parse $content with treebuilder 
my $page = HTML::TreeBuilder->new(); 
$page->parse($Explorador->content()); 
$page->eof(); 


@search_results= $page->look_down(
sub{ $_[0]-> tag() eq 'a' and ($_[0]->attr('href'))} 
); 

foreach $search_result (@search_results){ 
my($url, $title, $summary); 

$title = $page->look_down(
sub{ $_[0]-> tag() eq 'a' and ($_[0]->attr('href'))} 
); 
if($title) 
{ 
print 'title: '.$title->as_HTML,"\n"; 
} 
} 


$page->delete; 

все HTML код здесь: http://gist.github.com/465568

PD: Пожалуйста, помогите мне, я был здесь, как 3-х часов без успеха

Определённо, что происходит в том, что взять все, что есть один

http://valeptr.com/scripts/runner.php?BA=

и то, что я хочу, чтобы принять это:

http://valeptr.com/scripts/runner.php?PA=

+0

возможный дублировать [Как извлечь URL и текст ссылки из HTML в Perl?] (http://stackoverflow.com/questions/254345/how-can-i-extract-url-and-link-text-from-html -в-Perl) – Ether

ответ

1

Ваш звонок look_down() не может различать ссылки, которые вы хотите, и ссылки, которых вы не используете. Попробуйте более сильный фильтр, как

@search_results = $page->look_down(
    sub {$_[0]->{tag} eq 'a' && 
     $_[0]->attr('href') =~ /\?PA=/}); # only match http://...?PA=... 
1

я был бы склонен использовать HTML::TokeParser::Simple для этого, только чтобы избежать накладных расходов на построение дерева документа:

#!/usr/bin/perl 

use strict; use warnings; 

use HTML::TokeParser::Simple; 

my $parser = HTML::TokeParser::Simple->new('t.html'); 

while (my $tag = $parser->get_tag('a')) { 
    my $href = $tag->get_attr('href'); 
    next unless $href =~ /runner\.php\?PA=[0-9]+\z/; 

    print $tag->as_is; 

    while (my $token = $parser->get_token) { 
     print $token->as_is; 
     last if $token->is_end_tag('/a'); 
    } 
    print "\n"; 
} 

Выход:

<a href="http://valeptr.com/scripts/runner.php?PA=33425" target="_ptc" onclick="javascript:reloadpage(11)"> <img src="1appsearch.php_files/runner_007.gif" alt="Xray-cash" border="0"> </a> ... etc

Смежные вопросы