# 11.14 `urlparse` -- URL を解析して構成要素にする

このモジュールでは URL (Uniform Resource Locator) 文字列をその構成要素 (アドレススキーム、ネットワーク上の位置、パスその他) に分解したり、 構成要素を URL に組みなおしたり、``相対 URL (relative URL)'' を指定した ``基底 URL (base URL)'' に基づいて絶対 URL に変換するための標準的な インタフェースを定義しています。

このモジュールは相対 URL のインターネット RFC に対応するように設計 されました (そして RFC の初期ドラフトのバグを発見しました！)。

以下の関数が定義されています:

`urlparse`( | urlstring[, default_scheme[, allow_fragments]])

  URL を解釈して 6 つの構成要素にし、6 要素のタプル: (アドレススキーム、ネットワーク上の位置、パス、パラメタ、クエリ、 フラグメント指定子) を返します。このタプルは URL の一般的な 構造: `scheme://netloc/path;parameters?query#fragment` に対応しています。 各タプル要素は文字列で、空の場合もあります。 構成要素がさらに小さい要素に分解されることはありません (例えば ネットワーク上の位置は単一の文字列になります)。また % によるエスケープ は展開されません。上で示された区切り文字がタプルの各要素の一部分 として含まれることはありませんが、path 要素の先頭のスラッシュ がある場合には例外です。

  以下の例:

      urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')

  では、タプル

      ('http', 'www.cwi.nl:80', '/%7Eguido/Python.html', '', '', '')

  になります。

  default_scheme 引数が最低されている場合、標準のアドレススキーム を表し、アドレススキームを指定していない URL 文字列に対してのみ 使われます。この引数の標準の値は空文字列です。

  allow_fragments 引数がゼロの場合、URL のアドレススキームが フラグメント指定をサポートしていても指定できなくなります。 この引数の標準の値は `1` です。

`urlunparse`( | tuple)

  `urlparse()` が返すような形式のタプルから URL 文字列を構築します。 解析された元の URL が、例えばクエリ内容が空の ? のような冗長な区切り文字 を持っていた場合には、多少違いはあるが等価な URL になるかもしれません。 (RFC のドラフトの時点では、これらは等価でした)。

`urlsplit`( | urlstring[, default_scheme[, allow_fragments]])

  `urlparse()` に似ていますが、URL から params を切り離し ません。このメソッドは通常、URL の path 部分において、各セグメント にパラメタ指定をできるようにした最近の URL 構文 (RFC 2396 参照) の 場合に、`urlparse()` の代わりに使われます。 パスセグメントとパラメタを分割するためには分割用の関数が必要 です。この関数は 5 要素のタプル: (アドレススキーム、ネットワーク上の位置、パス、クエリ、フラグメント指定子) を返します。 バージョン2.2 以降で新規追加された 仕様です。

`urlunsplit`( | tuple)

  `urlsplit()` が返すような形式のタプル中のエレメントを組み合わせ て、文字列の完全な URL にします。 バージョン2.2 以降で新規追加された 仕様です。

`urljoin`( | base, url[, allow_fragments])

  ``基底 URL'' (base) と ``相対 URL'' (url) を組み合わせて、 完全な URL (``絶対 URL'') を構成します。 ぶっちゃけ、この関数は 基底 URL の要素、特にアドレススキーム、 ネットワーク上の位置、およびパス (の一部) を使って、相対 URL に ない要素を提供します。

  以下の例:

      urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')

  では、文字列

      'http://www.cwi.nl/%7Eguido/FAQ.html'

  になります。

  allow_fragments 引数は `urlparse()` における引数と同じ意味 を持ちます。

`urldefrag`( | url)

  url がフラグメント指定子を含む場合、フラグメント指定子 を持たないバージョンに修正された url と、別の文字列に分割 されたフラグメント指定子を返します。url 中にフラグメント 指定子がない場合、そのままの url と空文字列を返します。

参考資料:

RFC 1738, Uniform Resource Locators (URL)
  この RFC では絶対 URL の形式的な文法と意味付けを仕様化しています。

RFC 1808, Relative Uniform Resource Locators
  この RFC には絶対 URL と相対 URL を結合するための規則が ボーダケースの取扱い方を決定する ``異常な例'' つきで 収められています。

RFC 2396, Uniform Resource Identifiers (URI): Generic Syntax
  この RFC では Uniform Resource Name (URN) と Uniform Resource Locator (URL) の両方に対する一般的な文法的要求事項を記述しています。