2

Perl の WWW::Mechanize を使用してファイルをダウンロードしようとしています。前に Web サイトにログインし、フォームを検証した後、ファイルをダウンロードする必要があります。

問題は、数時間後、私がやりたいことをすることに成功しなかったことです. 最後に、スクリプトは zip ファイルではなく、興味深い内容のない html ファイルを保存します。

これが私がやったスクリプトです:

use WWW::Mechanize;
use Crypt::SSLeay;

my $login = "MyMail";
my $password = "MyLogin";
my $url = 'http://www.lemonde.fr/journalelectronique/donnees/protege/20101002/Le_Monde_20101002.zip';

$bot = WWW::Mechanize->new();
$bot->cookie_jar(
    HTTP::Cookies->new(
        file           => "cookies.txt",
        autosave       => 1,
        ignore_discard => 1,
    )
);

$response = $bot->get($url);

$bot->form_name("formulaire");
$bot->field('login', $login);
$bot->field('password', $password);
$bot->submit();

$response = $bot->get($url);
my $filename = $response->filename;

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

私が犯した過ちを見つけるのを手伝ってくれませんか?

4

2 に答える 2

3

URL を直接使用するのではなく、ブラウザを使用してダウンロードに移動すると入力されると思われる非表示の入力フィールドがいくつかあります。

さらに、JavaScript を介していくつかの Cookie を設定していますが、それらは Mechanize によって取得されません。ただし、プラグインWWW::Mechanize::Plugin::JavaScriptがあり、それが役に立ちます (私は経験がありません)。

LiveHTTPHeadersを使用して、ブラウザーによって送信されたものを確認し、それを複製します (TOS に違反していないと仮定します)。

于 2010-10-06T14:20:54.760 に答える
-4

あなたが言及した問題は、Mechanize ではよく知られています。最も簡単な解決策は、Raspo ライブラリを使用することです。

于 2010-10-06T13:12:19.543 に答える