代码之家  ›  专栏  ›  技术社区  ›  shinjuo

用Perl下载文件

  •  2
  • shinjuo  · 技术社区  · 14 年前

    我已经更新了我的代码,使其看起来像这样。当我运行它时,尽管它说找不到指定的链接。还有什么好方法可以测试它是否确实连接到了页面?

    #!/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下载,但它似乎只从链接下载。我有一个网页,上面的链接每隔三十分钟就会改变一次,名称中的日期和时间也会改变一次,所以它们永远不会相同。有我可以使用的内置功能吗?Google上的每个人都说要使用wget,但如果可能的话,我有点想坚持使用perl,只是想帮助我在编程时更好地学习它。

    还有一个用户名和密码可以登录到站点。我仍然知道如何使用Perl访问该站点,但我认为这可能会改变我可以用来下载的内容。

    2 回复  |  直到 7 年前
        1
  •  3
  •   Community Egal    7 年前

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

    您可以使用相同的方法来检索 .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 填写webform(查看 $mech->get() , $mech->submit_form() $mech->follow_link() )

        2
  •  2
  •   Anon.    14 年前

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