Скачать файлы с Perl - PullRequest
       4

Скачать файлы с Perl

2 голосов
/ 07 июля 2010

Я обновил свой код, чтобы он выглядел следующим образом. Когда я запускаю его, он говорит, что не может найти указанную ссылку. Кроме того, как можно проверить, действительно ли он подключается к странице?

#!/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);
<Ч />

(Исходное сообщение)

Каков наилучший способ загрузки небольших файлов с помощью Perl?

Я посмотрел на CPAN и нашел lwp-download, но, похоже, скачивает только по ссылке. У меня есть страница со ссылками, которые меняются каждые тридцать минут с указанием даты и времени в имени, поэтому они никогда не совпадают. Есть ли встроенная функция, которую я могу использовать? Все в Google продолжают говорить, что нужно использовать Wget, но я хотел остаться с Perl, если это возможно, просто чтобы помочь мне лучше изучить его, пока я программирую.

Также есть логин и пароль для входа на сайт. Я до сих пор знаю, как получить доступ к сайту с помощью Perl, но я подумал, что это может изменить то, что я могу использовать для загрузки.

Ответы [ 2 ]

3 голосов
/ 07 июля 2010

Как указано в комментарии в вашем другом вопросе: здесь

Вы можете использовать тот же метод для извлечения .csv файлов, что и .html, или любой другой текстовый файл по этому вопросу.

#!/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.";

Для входа в систему может потребоваться использовать WWW :: Mechanize для заполнения веб-формы (см. $mech->get(), $mech->submit_form() и $mech->follow_link())

2 голосов
/ 07 июля 2010

По сути, вам нужно получить страницу, проанализировать ее, чтобы получить URL, а затем загрузить файл.

Лично я бы использовал HTML::TreeBuilder::XPath, написал бы быстрое выражение XPath, чтобы перейти прямо к правильному узлу атрибута href, а затем подключил бы его к 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}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...