2010-09-10 14 views
3

Actuellement j'utilise Mechanize et la méthode get() pour obtenir chaque site, et vérifier avec la méthode content() chaque page principale pour quelque chose. J'ai une connexion ordinateur + 10Mbit très rapide, et encore, il a fallu 9 heures pour vérifier les sites 11K, ce qui n'est pas acceptable, le problème est, la vitesse de la fonction get(), qui, évidemment, doit obtenir la page , existe-t-il un moyen de le rendre plus rapide, peut-être de désactiver quelque chose, car j'ai seulement besoin de vérifier la page principale html.Visiter un demi-million de pages avec Perl

Merci,

Répondre

14

Effectuez des requêtes en parallèle plutôt qu'en série. Si j'avais besoin de faire cela, je débiterais un processus pour récupérer la page. Quelque chose comme Parallel::ForkManager, LWP::Parallel::UserAgent ou WWW:Curl peut aider. J'ai tendance à favoriser Mojo::UserAgent.

+0

Parfait !!!! Merci beaucoup!. Je ne savais pas que vous pouvez multithread avec Perl, jamais vraiment cherché ce type de fonctionnalité lors de l'utilisation de Perl, il est vraiment utile dans ce cas. – snoofkin

+3

@soulSurfer: Les fourchettes et les fils sont des choses différentes. –

+0

Eh bien, mon erreur. Je voulais dire des processus. – snoofkin

7

Utiliser WWW::Curl (et spécifiquement WWW::Curl::Multi). Je l'utilise pour explorer plus de 100 millions de pages par jour. Le module est une liaison fine au-dessus de libcurl, donc il se sent un peu C-ish, mais il est rapide et fait presque tout ce que libcurl est capable de faire.

Je ne recommanderais pas d'utiliser LWP :: Parallel :: UA, car c'est plutôt lent et le module lui-même n'est pas très bien pensé. Quand j'ai commencé à écrire un crawler, je pensais à l'origine à LWP :: Parallel :: UA, mais j'ai décidé de ne pas le faire quand j'ai regardé dans ses internes. Je suis le mainteneur actuel du module WWW::Curl.