【问题标题】:Download files with Perl使用 Perl 下载文件
【发布时间】:2010-07-07 04:34:25
【问题描述】:

我已将我的代码更新为如下所示。当我运行它时,虽然它说它找不到指定的链接。还有什么是测试它确实连接到页面的好方法?

#!/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 访问该站点,但我认为这可能会改变我可以用来下载的内容。

【问题讨论】:

  • 你使用的是什么操作系统?
  • 您应该开始一个新问题,而不是修改旧问题。这两个问题是不同的,这是关于身份验证的,我在下面的评论中回答了这个问题。你不需要 Apache...

标签: html perl download


【解决方案1】:

正如您在其他问题的评论中所述:here

您可以使用与.html 或任何其他基于文本的文件相同的方法来检索.csv 文件。

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

【讨论】:

  • 这实际上是针对与该页面略有不同的内容。在此页面上,链接每三十分钟更新一次,并且名称总是不同的,因为它们是时间和日期。所以我不能只输入链接名称
  • 你会想要使用WWW::Mechanize。 $mech->follow_link 可以跟随第 n 个链接,或带有指定文本的链接,或与正则表达式匹配的链接。
  • 会使用弹出式登录进行机械化工作吗? datawww2.wxc.com/kml/echo/MESH_Max_180min
  • 您可能必须这样做:http://username:password@ datawww2.wxc.com/kml/echo/MESH_Max_180min,否则您可能必须捕获 cookie。我不知道你是怎么看到那个链接的,所以我不能告诉你。
  • 这是一个天气预报网站的链接。我得到了链接用户名和密码。所以我总是直接去链接
【解决方案2】:

基本上,您需要获取页面,解析它以获取 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}
}

【讨论】:

    猜你喜欢
    • 2011-06-07
    • 2020-03-18
    • 2020-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多