【问题标题】:Perl WWW::Mechanize from string variablePerl www ::从字符串变量机械化
【发布时间】:2012-03-28 10:00:01
【问题描述】:

在 Perl 中,使用模块 WWW::Mechanize(必需,而不是其他模块),是否可以从字符串变量而不是 url “解析”文档?

我的意思是代替

       $mech->get($url);

做类似的事情

       $html = '<html...';
       $mech->???($html);

可能吗?

【问题讨论】:

    标签: html perl parsing dom mechanize


    【解决方案1】:

    不是真的。您可以尝试使用$mech-&gt;response 获取HTTP::Response 对象,然后使用该对象的content 方法将内容替换为您自己的字符串。但是你也必须调整所有的消息头,它会变得很乱。

    你想做什么? WWW::Mechanize 提供的 formsimages 等方法是基于其他模块的,并且代码相当简单。

    【讨论】:

    • 我需要分析其他程序获取并作为输入传入的 HTML 代码。
    【解决方案2】:

    您可以将数据写入磁盘,然后以通常的方式获取()它。像这样的:

    #!/usr/bin/env perl
    
    use strict;
    use warnings;
    
    use File::Temp;
    use URI::File;
    use WWW::Mechanize;
    
    my $data = '<html><body>foo</body></html>';
    
    # write the data to disk
    my $fh = File::Temp->new;
    print $fh $data;
    $fh->close;
    
    my $mech = WWW::Mechanize->new;
    $mech->get( URI::file->new( $fh->filename ) );
    
    print $mech->content;
    

    打印:

    foo

    【讨论】:

    • 我只是使用 File::Temp 将数据写入磁盘并使用 $mech->get(URI::file->new($tempfilename)) 将其发送到机械化跨度>
    • @singingfish 非常感谢您指出这一点。我已经相应地更新了我的示例。很好地减少代码。
    【解决方案3】:

    知道了:

              $mech->get(0);
              $mech->update_html('<html>...</html>');
    

    有效!

    【讨论】:

    • 多么愚蠢的界面。难怪我在文档中找不到它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2013-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    相关资源
    最近更新 更多