11.2 Standard Module urllib
このモジュールは、World Wide Webを通じてデータを取り出すためのインターフェースを提供します。
特に、urlopen()関数は組み込み関数 open()に似ていますが、
ファイル名の代わりに Universal Resource Locators (URLs)を受け付けます。
制限としては、URLは読み出しオープンしかできず、またシーク操作ができません。
次のようなパブリック関数が定義されています:
- urlopen (url)
-
URLで示されるネットワークオブジェクトを読み出しオープンします。
URLにスキーム記述子が含まれていないか、"file:"が指定されていればローカルファイルとして、
そうでなければネットワーク上のどこかのサーバに対してのソケット接続がオープンされます。
接続できなかった場合、またはサーバがエラーコードを返してきた場合は、
IOError例外が発生します。
すべてがうまくいけば、「ファイルのような」オブジェクトが返されます。
このオブジェクトは次のメソッドをサポートしています:
read(), readline(),
readlines(), fileno(), close() and
info()。
最後のメソッドを除いて、ファイルオブジェクトと同じインターフェースを持ちます --
セクション2.1を参照。
(しかし、組み込みオブジェクトではないので、本物の組み込みファイルオブジェクトが必要な
いくつかの場合には使えません。)
info()メソッドはサーバから受け取ったヘッダ
(プロトコルがそういったヘッダを使っていれば -- 現在はサポートプロトコルはHTTPだけ)
を含む mimetools.Message
クラスのインスタンスを返します。
mimetools モジュールの記述を参照してください。
- urlretrieve (url)
-
必要であれば、URLで示されるネットワークオブジェクトをローカルファイルにコピーします。
URLがローカルファイルか、有効なキャッシュのコピーを指していればコピーはされません。
このメソッドは
(ファイル名(オブジェクトが見つけられたローカルファイル名),
ヘッダ(ローカルオブジェクトの場合Noneか、
urlopen()で返してきたオブジェクト(可能ならキャッシュされたリモートオブジェクト)
に対してのinfo()メソッドの結果)
)のタプルを返します。
例外はurlopen()と同様です。
- urlcleanup ()
-
以前のurlretrieve()で作成されたキャッシュをクリアします。
- quote (string[, addsafe])
-
string中の特殊文字を"%xx"エスケープを使って置き換えます。
英数字・"_,.-"は置き換えられません。
addsafeが指定されるとそれらも置き換えられません -- デフォルトは'/'です。
例:quote('/~connolly/') は '/%7econnolly/' のようになります。
- quote_plus (string[, addsafe])
-
quote()と同じですが、HTMLのクオーティングに要求されるように、
スペースもプラス記号によって置き換えられます。
- unquote (string)
-
"%xx"エスケープが、対応する1文字に置き換えられます。
例: unquote('/%7Econnolly/') は '/~connolly/'となります。
- unquote_plus (string)
-
quote()と同じですが、HTMLのアンクオーティングに要求されるように、
プラス記号がスペースによって置き換えられます。
制限:
-
現状では以下のプロトコルのみサポートされます:
HTTP(バージョン 0.9と 1.0)、Gopher (Gopher-+ は含まない)、FTPおよびローカルファイル。
-
urlretrieve()のキャッシュ操作の機能は、
有効期限ヘッダの処理を考える時間が見つかるまで無効となっています。
-
キャッシュにあるのが、特殊なURLかどうかを問い合わせる関数が必要に思われます。
-
互換性のために、ローカルファイルを指すURLのオープンに失敗した場合、
次に FTPを使うようになっています。
これは時々、紛らわしいエラーメッセージの原因となります。
-
urlopen() および urlretrieve()関数は時折、
ネットワーク接続に時間を要することがあります。
これは、スレッドを使わずこれらの関数を使用して、対話的な Webクライアントを作成することは
難しいということを意味しています。
-
urlopen() または urlretrieve()でサーバから返されるのは生(raw)データです。
これはイメージのようなバイナリデータかもしれないし、プレーンテキストやHTMLかも知れません。
HTTPプロトコルはヘッダの中にデータ型の情報を持っており、
content-type ヘッダを見ることで判ります。
Gopherプロトコルでは、データ型の情報は URL中にエンコードされて入っています;
これを取り出すのは容易ではありません。
もしHTMLが戻ってくるのであれば、モジュールhtmllib
を使って解析することができます。
-
たとえurllib moduleが URL文字列を解析するための(ドキュメントにない)
コードを含んでいたとしても、推奨される URL文字列操作のためのインターフェースは
モジュールurlparse にあります。
guido@python.org