[SP-pm] WWW::Scripter - Como tirar o objeto da memória

Andre Carneiro andregarciacarneiro at gmail.com
Fri Apr 16 05:32:44 PDT 2010


Bom dia !

Estou fazendo um spider e estou tendo problemas para retirar o  objeto
WWW::Scripter da memória.

Esse módulo é bem interessante para evitar que você tenha que estudar o
Javascript que o 'brilhante' designer fez e devolve a saída desse Javascript
em formato HTML. Até aí, tudo bem! Funciona! Maravilha!

O problema é que eu preciso que isso funcione em um spider onde eu tenho
várias iterações com esse objeto, e para cada 'get' que ele faz em cima de
uma página, ele reserva um novo espaço na memória que não libera nunca.

Lendo a documentação, eu vi que existe um método 'clear_history', mas
aparentemente não serve para isso que eu estou querendo. Tentei forçar uma
chamada para DESTROY, mas também não está funcionando. Abaixo tem um
segmento de código que pode ajudar vocês a me ajudarem.

<code>
.
.
.
    my $scripter = WWW::Scripter->new;
    $scripter->use_plugin('JavaScript');
    $scripter->max_history(1);
    while(defined($tree)){
        my @products =
$tree->findnodes("/html/body/div[\@id='container']/div[\@id='geral']/center/div[\@id='centro']/div[\@id='centro2_int']/div[\@id='produtos-vitrine']/div");

        print "\n\n#################################ACHEI " . @products .
"PRODUTOS!\n\n";
        foreach my $p(@products){
            if($p){
                print "\n\n" . $p->as_HTML;
                #link/imagem
                my ($prelink) = $p->findnodes('a');
                if($prelink) {
                    my $u  = $prelink->attr('href');
                    $u = decode_entities($u);
                    $self->product->url_original($u);
                    $self->product->url($self->product->url_original.
'&frompartner=3212');
                    my $preimg = $prelink->look_down(_tag => 'img');
                    if($preimg){
                        $self->product->imagem($preimg->attr('src'));
                    }

                    #Capturando detalhes
#                    print "\n\nURL: " . $self->product->url_original .
"\n\n";
                    eval{$self->agent->get($self->product->url_original)};
                    if($self->agent->success){
                        $scripter->get($self->product->url_original);
                        my $dtree     =
HTML::TreeBuilder::XPath->new_from_content($self->agent->content);
                        $self->get_detail($dtree , $scripter);
                     }else {
.
.
.
                     }
.
.
.
     }
}

</code>

Este é um segmento de código onde eu já observei que ocorre o problema
mencionado mais acima.

Por favor não comentem sobre 'use strict e use warnings' !! Ambos estão
devidamente em seus lugares mais acima no código.

Página do módulo:*WWW::Scripter*<http://search.cpan.org/%7Esprout/WWW-Scripter-0.010/lib/WWW/Scripter.pod>



Obrigado!

-- 
André Garcia Carneiro
Analista/Desenvolvedor Perl
(11)82907780
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/saopaulo-pm/attachments/20100416/d189930e/attachment.html>


More information about the SaoPaulo-pm mailing list