簡體   English   中英

如何在提交表單后下載WWW :: Mechanize文件?

[英]How do I download a file with WWW::Mechanize after it submits a form?

我有代碼:

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

那么如何下載該標題中的文件?

謝謝,

科迪古德曼

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

$ mech-> save_content($ filename)

將$ mech-> content的內容轉儲到$ filename中。 $ filename將被覆蓋。 如果有任何錯誤,則死亡。

如果內容類型不以“text /”開頭,則內容將以二進制模式保存。

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

我嘗試了你的代碼並返回一堆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 ); 

最讓我失望的是“mechanize-> form_number”子程序從1開始,而典型的程序從0開始索引。如果有人想知道如何下載響應頭 ,或下載頭附件 s,這就是這樣做的方式。

現在這里是我想要的完整代碼。

#!/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 );

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM