5

我有代码:

#!/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 下载它?

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

谢谢,

科迪·古德曼

4

3 回答 3

3

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

$mech->save_content($filename)

将 $mech->content 的内容转储到 $filename 中。$filename 将被覆盖。如果有任何错误就死掉。

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

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

于 2012-10-05T09:17:56.070 回答
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,否则您是在要求其他人为您编写程序。

确定要下载的 URL 后,只需获取它,然后将响应内容写入文件即可。例如


if ( ! open( FOUT, ">output.bin" ) ) {
    die( "Could not create file: $!" );
}
binmode( FOUT ); # required for Windows
print( FOUT $m->response->content() );
close( FOUT );
于 2009-11-13T10:46:55.553 回答
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 );
于 2009-11-15T00:51:02.937 回答