Source

pymotw-ja / PyMOTW / urlparse / index.rst

Full commit

urlparse -- URL を部分文字列に分割する

目的:URL を部分文字列に分割する
Python バージョン:1.4 以上

:mod:`urlparse` モジュールは関連する RFC で定義されているように URL を部分文字列に分解するための機能を提供します。

解析する

:func:`urlparse()` 関数は6つの要素を持つタプルのように動作するオブジェクトを返します。

タプルのインタフェースを通して利用できる URL の部分文字列はスキーマ(scheme), ネットワークロケーション(netloc), パス(path), パラメータ(params), クエリ(query) と フラグメント(fragment) です。

返される値はタプルのように動作しますが、実際は :ref:`namedtuple <collections-namedtuple>` に基づいています。タプルのサブクラスはインデックスの代わりに属性名を通して URL の部分文字列へアクセスすることをサポートします。プログラマが簡単に使用できるのに加えて、その属性 API はタプル API では利用できない複数の値へのアクセスも提供します。

usernamepassword は入力 URL に含まれるときに利用できて、含まれないときは None です。 hostnamenetloc と同じ値で全て小文字です。 port は存在するときに整数値へ変換され、存在しないときは None です。

:func:`urlsplit()` 関数は :func:`urlparse()` に対する代替方法です。その動作は URL からパラメータを分割しないので :func:`urlparse()` と少し違っています。これは RFC 2396 に従う、そのパスの各セグメントのパラメータをサポートする URL に便利です。

パラメータが分割されないのでタプル API は params 属性のない、6つではなく5つの要素を返します。

URL からフラグメントの識別子を簡単に取り除くために、また URL からベースページの名前を取得するために :func:`urldefrag()` を使用する必要があるでしょう。

ベース URL とそのフラグメントを含むタプルが返されます。

再構築

分割された URL から1つの文字列へ戻す複数の方法があります。解析された URL オブジェクトは :func:`geturl()` メソッドを持ちます。

:func:`geturl()`:func:`urlparse()` 又は :func:`urlsplit()` によって返されるオブジェクトでのみ動作します。

もし普通のタプルで取得したいなら、URL にそれらを結合するために :func:`urlunparse()` を使用できます。

:func:`urlparse()` が返す :class:`ParseResult` クラスはタプルのようには使用できません。この例では :func:`urlunparse()` が普通のタプルでも動作することを表すために明示的に新たなタプルを作成します。

入力 URL が余分な文字列を含むなら URL を再構築した文字列からその文字列が欠落します。

このケースでは parameters, queryfragment がオリジナルの URL から全て欠落します。新たな URL はオリジナルの URL と同じではありませんが、標準によると等価です。

結合

URL を解析することに加えて :mod:`urlparse` には関連するフラグメントから相対 URL を構築する :func:`urljoin()` があります。

この例では、そのパスの相対部分("../")は 2番目の URL が算出されるときに考慮されます。