【问题标题】:How can I download files over HTTPS with Perl?如何使用 Perl 通过 HTTPS 下载文件?
【发布时间】:2017-03-09 01:58:50
【问题描述】:

我想通过 HTTPS 下载大约 200 个不同的 HTML 文件,并从每个文件中提取页面标题并将标题放入文本文档中。

如何使用 Perl 通过 HTTPS 下载文件?我在 Google 上进行了搜索,但没有找到非常有用的信息或示例。

【问题讨论】:

  • 在这两个答案中,您选择接受 3 票反对的答案和 7 票赞成的答案?!

标签: perl https


【解决方案1】:

看看HTML::HeadParser,它是HTML::Parser 分布的一部分。它将为您解析一个 HTML 标头以提取 <title> 标记内容。

为了获取 HTML 内容,有大量可用的 CPAN 模块。一个这样的模块是LWP::Curl,它属于libwww-perl 系列。在此网站上搜索many discussions of fetching HTML 以了解更多信息。

要通过 HTTPS 下载,请查看 libwww-perl 下的文档。当前在 libwww-perl 下使用 SSL 的“标准”方式是通过Crypt::SSLeay

【讨论】:

    【解决方案2】:

    查找下载部分信息的好地方是libwww-perl cookbook

    这是一些基本的示例代码。这不一定是最好的方法,但它应该可以工作,假设您有 LWP 模块(可从 CPAN 获得)。

    #!/usr/bin/perl
    
    use warnings;
    use strict;
    use LWP::Simple;
    
    while (my $site = <STDIN>)
    {
        my $doc = get $site;
        if (defined($doc))
        {
            if ( $doc =~ m/<title>(.*)<\/title>/i )
            {
               print "$1\n";
            }
        }
    }
    

    您可能想要添加更多的花里胡哨,用于取消转义文本、处理错误条件、与多个线程并行执行请求、将用户代理伪装成 Mozilla 等 :)

    如果您将其保存为 titlegrab.pl,并且您在 sites.list 中有一个站点列表(每行一个 URL),您可以将其与 $ cat sites.list | perl titlegrab.pl 一起使用以查看所有标题。

    或者.. 重定向到某个输出文件,例如$ cat sites.list | perl titlegrab.pl &gt; results.txt

    【讨论】:

    • 任何想法为什么我得到这个返回,当我使用你给我的链接中的 HTTPS 示例时:500 Can't locate object method "new" via package "LWP::Protocol::https: :Socket"
    • 您可能需要手动安装 Net::SSL 模块,LWP 依赖于 https。同样,这应该很容易通过 CPAN 完成。
    • 不要从 STDIN 读取 - 从 ARGV 读取(或在本例中为 )。也不要使用正则表达式(并打破)来解析 HTML - 使用 HTML 解析器。
    • 我确实说过这是初级的!我在一个 URL 示例列表上运行了它,它对我来说效果很好。我同意 HTML 解析器,但为了让这个简单的任务保持简短,正则表达式似乎足够了。你能更详细地描述一下破损吗?
    • 如果标题标签和它的内容不在一行上怎么办?您的正则表达式失败。请改用 HTML::HeadParser。此外,您忘记提及如何添加 HTTPS 支持:在运行代码之前安装 Crypt::SSLeay。并且,你赢得了“无用的猫”奖。 :)
    猜你喜欢
    • 2012-07-16
    • 1970-01-01
    • 2016-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多