如何在提交表单后下载WWW :: Mechanize文件?

时间:2009-11-13 08:37:23

标签: perl download form-submit www-mechanize

我有代码:

#!/usr/bin/perl
use strict;
use WWW::Mechanize;

my $url = 'http://divxsubtitles.net/page_subtitleinformation.php?ID=111292';
my $m = WWW::Mechanize->new(autocheck => 1);
$m->get($url);
$m->form_number(2);
$m->click();
my $response = $m->res();
print $m->response->headers->as_string;

它提交了页面上的下载按钮,但我不确定如何下载POST后发回的文件。

如果可能的话,我想用wget下载这个。我以为他们可能是秘密网址传递的东西?或者我是否必须直接从响应流中使用LWP下载它?

那么如何下载该标题中的文件?

谢谢,

科迪古德曼

3 个答案:

答案 0 :(得分:3)

提交表单后,您可以使用:

  

$ mech-> save_content($ filename)

     

将$ mech->内容的内容转储到$ filename中。 $ filename将是   覆盖。如果有任何错误,则死亡。

     

如果内容类型不以“text /”开头,则内容为   以二进制模式保存。

来源:http://metacpan.org/pod/WWW::Mechanize

答案 1 :(得分:1)

我尝试了您的代码并返回一堆HTML,其中只有http://个引用:

    http://www.w3c.org
    http://ad.z5x.net
    http://divxsubtitles.net
    http://feeds2read.net
    http://ad.z5x.net
    http://www.google-analytics.com
    http://cls.assoc-amazon.com
使用代码


    my $content = $m->response->content();
    while ( $content =~ m{(http://[^/\" \t\n\r]+)}g ) {
        print( "$1\n" );
    }

所以我对你的评论是:
1.将use strict;添加到您的代码中,如果您不这样做,则表示您正在编程失败 2.阅读输出HTML并确定接下来要做什么,你还没有这样做,因此你问了一个不完整的问题。除非您 确定要下载的网址,否则您要求其他人为您编写程序。

一旦确定了要下载的URL,就可以轻松获取它,然后将响应内容写入文件。 e.g。


if ( ! open( FOUT, ">output.bin" ) ) {
    die( "Could not create file: $!" );
}
binmode( FOUT ); # required for Windows
print( FOUT $m->response->content() );
close( FOUT );

答案 2 :(得分:0)

最让我失望的是“mechanize-> form_number”子程序从1开始,而典型的程序从0开始索引。如果有人想知道如何下载响应头,或下载标题附件,这是实现此目的的方法。

现在这里是我想要的完整代码。

#!/usr/bin/perl
use strict;
use WWW::Mechanize;

my $url = 'http://divxsubtitles.net/page_subtitleinformation.php?ID=111292';
my $m = WWW::Mechanize->new(autocheck => 1);
$m->get($url);
$m->form_number(2);
$m->click();
my $response = $m->res();
my $filename = $response->filename;

if (! open ( FOUT, ">$filename" ) ) {
    die("Could not create file: $!" );
}
print( FOUT $m->response->content() );
close( FOUT );