Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Crawler che legga solo i primo 10kb di una pagina

0 views
Skip to first unread message

Manuel

unread,
Jul 21, 2008, 11:20:51 AM7/21/08
to
Salve,
da tempo ho scritto uno spider che funziona egregiamente. l'unico
problema è che nel caso in cui lui provi a visitare una pagina molto
pesante i tempi si allungano. esiste un modo per lo crawler di leggere
solo i primi 10 kb di una pagina per esempio? o cmq per velocizzare la
cosa?

questo è il mio codice

$url = URI->new($sito[$iesterni]);
$response = $browser->get($url, @ns_headers);

Emanuele Zeppieri

unread,
Jul 21, 2008, 8:44:37 PM7/21/08
to
Manuel wrote:

(Se avessi scritto (solo) "use strict;" avresti dato più o meno le
stesse informazioni ;-)

Qui spiega come scaricare soltanto i primi X byte (in vari modi):
http://www.perlmonks.org/?node_id=690951

Poi non so se sia la cosa migliore da fare: mi viene in mente che il
collo di bottiglia sia il tuo parser piuttosto che il trasferimento di
un file di testo (presumibilmente mai enorme, trattandosi di una pagina
html on-line), ma non avendo idea di come sia scritto tale parser (è
basato su HTML::Parser?) non so cosa suggerirti...

D'altro canto non vedo che utilità possa avere una pagina incompleta,
per i tuoi scopi di crawling...

A meno che tu non riesca a capire dai primi byte se si tratta di una
pagina /interessante/ o meno...
Ma non è che hai fornito un gran contesto eh! ;-)
E, come al solito, a fare ipotesi su quello che uno ha in mente si perde
solo tempo, rischiando di dire cose inutili anche per chi ha fatto la
domanda.

Se vuoi riprovare con qualche informazione in più...

Ciao.

Manuel

unread,
Jul 23, 2008, 4:56:20 AM7/23/08
to
On Jul 22, 2:44 am, Emanuele Zeppieri

Ciao mi hai dato proprio il link che mi serviva :-) ti rigrazio.
mi serve per vedere solo i meta del sito in questione, se la pagina è
online e altri dati.
io uso LWP::UserAgent
ora l'unico problema che mi rimane è che spesso il sito a cui lo
spider prova a collegarsi risponde lentamente (anche dopo 20 secondi,
mentre per altri siti è velocissimo), e ho provato a mettere il
timeout ma cmq lo script rimane lì ancorato ad aspettare che il sito
risponda. non c'è un modo per risolvere questo problema?

Emanuele Zeppieri

unread,
Jul 23, 2008, 8:11:37 AM7/23/08
to
Manuel wrote:

> Ciao mi hai dato proprio il link che mi serviva :-) ti rigrazio.
> mi serve per vedere solo i meta del sito in questione, se la pagina è
> online e altri dati.
> io uso LWP::UserAgent
> ora l'unico problema che mi rimane è che spesso il sito a cui lo
> spider prova a collegarsi risponde lentamente (anche dopo 20 secondi,
> mentre per altri siti è velocissimo), e ho provato a mettere il
> timeout ma cmq lo script rimane lì ancorato ad aspettare che il sito
> risponda. non c'è un modo per risolvere questo problema?

OK, direi che la cosa migliore è fare il crawling non bloccante (in
parallelo) su diversi siti, così se ne incontri uno /lento/, nel
frattempo il tuo robot ne visita altri senza bloccarsi.

Inoltre con i moduli elencati nel seguito puoi anche settare un timeout
scaduto il quale il sito troppo lento viene (ad esempio) abbandonato.

Puoi usare questo che è proprio quello che ti serve bell'e pronto:
http://search.cpan.org/dist/ParallelUserAgent/

Con questi altri due approcci invece (entrambi basati su AnyEvent ma con
interfacce diverse), ti tocca lavorare un pochino di più:
Coro:
http://search.cpan.org/dist/Coro/
esempio:
http://search.cpan.org/src/MLEHMANN/Coro-4.744/eg/lwp

AnyEvent:
http://search.cpan.org/dist/AnyEvent/

ma ti danno un po' di flessibilità in più (e funzionano benissimo).

Poi ci sarebbe pure questo, se ti piace POE:
http://search.cpan.org/~rcaputo/POE-Component-Client-UserAgent-0.06/UserAgent.pm
(che comunque usa LWP::Parallel)

e ancora altri n-mila approcci (tra i quali quelli fork e thread-based)
come sempre in Perl, fortunatamente :-)

Ciao,
Emanuele.

0 new messages