読者です 読者をやめる 読者になる 読者になる

けつあご日記

こんちは.菊地です.なんか浅ーいことをいろいろ書きます

Python: 「パスワードを入力しダウンロード」を自動化

Python

久しゅう^_^

ファイルアップローダーサイトで,自動的にダウンロードしたいでしょ?誰しも.
わたしはkienuというアップローダーで自動化したかったんです.
※追記(2015/11/16)kienuは最近閉鎖しました.消えぬとは一体なんだったのか...
以下テスト用にアップロードしたもの

https://kie.nu/2LUu
password: dl_test


ダウンロードにはパスワードが必要なタイプのファイルです.pythonのmechanizeというモジュールがこういうの得意らしいので,使ってみました.

普通スクレイピングするならurllib2とか使うらしいんですが,mechanizeは特に要認証の場合に強いとのことです.
基本的な使い方はこちらなど.
Python の mechanize の使い方メモ - 銀の人のメモ帳


普通にブラウザからダウンロードする場合,フォームにパスワードを入力しDOWNLOADボタンでフォーム送信すればよいので,submit()すればいんじゃね?カレントディレクトリかどっかにダウンロード開始するんじゃね?と思ったんです.

import mechanize

url = "https://kie.nu/2LUu"

def kienu(password):
    br = mechanize.Browser()
    br.open(url)
    br.select_form(nr=0)
    br["passwd"] = password
    br.submit()

kienu("dl_test")


しかしこれがうんともすんとも.いろいろいじったんですが,だめだったのでstackoverflowニキに相談ニキ.
ja.stackoverflow.com

みなさんお詳しいなぁ.結局はsubmit()した時点ではファイルがオブジェクトで返ってきているだけで,この後にread()やらwrite()やらしなくてはならないということでした.
言われてみればそりゃそうだという感じですね.

隠しフォームの入力も必要というアドバイスがありましたが,mechanizeはここらへん勝手にうまくやってくれるそうです.すごいね.

これをもとに,複数のURLに飛んで連続でダウンロードするようにコーディングしたいと思います.サーバーに負荷をかけないように適度にバッファを入れる感じになりますかね.



ちなみに,他の回答にある,コマンドラインからcurlで得るという方法もちゃんと動きました.シェルスクリプトにして自動化というのもアリですね.


入門 Python 3
入門 Python 3