2010-07-07 9 views
2

J'ai mis à jour mon code pour ressembler à ceci. Quand je l'exécute bien qu'il dit qu'il ne peut pas trouver le lien spécifié. Aussi, quel est un bon moyen de tester qu'il se connecte effectivement à la page?Télécharger des fichiers avec Perl

#!/usr/bin/perl -w 
use strict; 
use LWP; 
use WWW::Mechanize; 

my $mech = WWW::Mechanize->new(); 
my $browser = LWP::UserAgent->new; 

$browser->credentials(
    'Apache/2.2.3 (CentOS):80', 
    'datawww2.wxc.com', 
    '************' => '*************' 
); 

my $response = $browser->get(
'http://datawww2.wxc.com/kml/echo/MESH_Max_180min/' 
); 

$mech->follow_link(n => 8); 

(Original Post)

Quelle est la meilleure façon de télécharger des petits fichiers avec Perl?

J'ai regardé CPAN et j'ai trouvé lwp-download, mais il semble que je télécharge depuis le lien. J'ai une page avec des liens qui changent toutes les trente minutes avec la date et l'heure dans le nom afin qu'ils ne soient jamais les mêmes. Y a-t-il une fonction intégrée que je peux utiliser? Tout le monde sur Google n'arrête pas de dire d'utiliser Wget, mais je voulais rester avec Perl si possible juste pour m'aider à mieux l'apprendre pendant que je programme avec.

Il existe également un nom d'utilisateur et un mot de passe pour se connecter au site. Je sais comment accéder au site en utilisant toujours Perl, mais je pensais que cela pourrait changer ce que je peux utiliser pour télécharger.

+0

De quel système d'exploitation êtes-vous? – Sean

+0

J'utilise Windows 7 – shinjuo

+0

vous devriez avoir commencé une nouvelle question, plutôt que de modifier l'ancienne. les deux questions sont différentes, c'est en ce qui concerne l'authentification, que j'ai répondu dans le commentaire ci-dessous. Vous n'avez pas besoin de l'Apache ... – vol7ron

Répondre

3

Comme indiqué dans un commentaire dans votre autre question: here

Vous pouvez utiliser la même méthode pour récupérer des fichiers .csv comme .html, ou tout autre fichier texte pour la question.

#!/usr/bin/perl -w 
use strict; 
use LWP::Simple; 

my $csv = get("http://www.spc.noaa.gov/climo/reports/last3hours_hail.csv") 
      or die "Could not fetch NWS CSV page."; 

Pour vous connecter, vous devrez peut-être utiliser WWW::Mechanize pour remplir le formulaire en ligne (regardez $mech->get(), $mech->submit_form() et $mech->follow_link())

+0

Ceci est en fait pour quelque chose d'un peu différent de cette page. Sur cette page, les liens sont mis à jour toutes les trente minutes et les noms sont toujours différents puisqu'ils sont une heure et une date. Donc, je ne peux pas simplement mettre le nom de lien – shinjuo

+0

, vous voulez utiliser 'WWW :: Mechanize' alors. '$ mech-> follow_link' peut suivre le nième lien, ou un lien avec le texte spécifié, ou un lien qui correspond à une regex. – vol7ron

+0

Est-ce que mécaniser fonctionnera avec une connexion popup? http://datawww2.wxc.com/kml/echo/MESH_Max_180min/ – shinjuo

2

Fondamentalement, vous avez besoin d'aller chercher la page, l'analyser pour obtenir l'URL , puis téléchargez le fichier.

Personnellement, j'utiliserais HTML::TreeBuilder::XPath, j'écrirais une expression XPath rapide pour aller directement au bon noeud d'attribut href, puis le brancherais dans LWP.

use HTML::TreeBuilder::XPath; 
my $tree = HTML::TreeBuilder::XPath->new; 
$tree->parse({put page content here}); 
foreach($tree->findnodes({put xpath expression here}){ 
    {download the file} 
} 
Questions connexes