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 でダウンロードする方法が必要です。私は彼らが渡された秘密のURLか何かかもしれないと思っていましたか? それとも、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 に答える