20.16. urlparse — URLをコンポーネントに解析します—Pythonドキュメント

提供:Dev Guides
< PythonPython/docs/2.7/library/urlparse
移動先:案内検索

20.16。 urlparse —URLをコンポーネントに解析します

ノート

Python3では urlparse モジュールの名前がurllib.parseに変更されました。 2to3 ツールは、ソースをPython 3に変換するときに、インポートを自動的に適応させます。


ソースコード: :source: `Lib / urlparse.py`



このモジュールは、Uniform Resource Locator(URL)文字列をコンポーネント(アドレス指定スキーム、ネットワークの場所、パスなど)に分割し、コンポーネントを結合してURL文字列に戻し、「相対URL」をに変換するための標準インターフェイスを定義します。 「ベースURL」が指定された絶対URL。

このモジュールは、Relative Uniform ResourceLocatorに関するインターネットRFCと一致するように設計されています。 次のURLスキームをサポートします:fileftpgopherhdlhttphttps、[ X105X] 、mailtommsnewsnntpprosperorsync、[X189X ] 、rtspusftpshttpsipsipssnewssvnsvn+sshtelnetwais

バージョン2.5の新機能: sftpおよびsipsスキームのサポート。


urlparse モジュールは、次の関数を定義します。

urlparse.urlparse(urlstring[, scheme[, allow_fragments]])

URLを6つのコンポーネントに解析し、6タプルを返します。 これは、URLの一般的な構造scheme://netloc/path;parameters?query#fragmentに対応します。 各タプルアイテムは文字列であり、空の可能性があります。 コンポーネントは小さな部分に分割されず(たとえば、ネットワークの場所は単一の文字列です)、% eスケープは展開されません。 上記の区切り文字は、 path コンポーネントの先頭のスラッシュが存在する場合は保持されることを除いて、結果の一部ではありません。 例えば:

>>> from urlparse import urlparse
>>> o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
>>> o   
ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
            params='', query='', fragment='')
>>> o.scheme
'http'
>>> o.port
80
>>> o.geturl()
'http://www.cwi.nl:80/%7Eguido/Python.html'

RFC 1808 の構文仕様に従って、urlparseは「//」によって適切に導入された場合にのみnetlocを認識します。 それ以外の場合、入力は相対URLであると見なされるため、パスコンポーネントで始まります。

>>> from urlparse import urlparse
>>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
           params='', query='', fragment='')
>>> urlparse('www.cwi.nl/%7Eguido/Python.html')
ParseResult(scheme='', netloc='', path='www.cwi.nl/%7Eguido/Python.html',
           params='', query='', fragment='')
>>> urlparse('help/Python.html')
ParseResult(scheme='', netloc='', path='help/Python.html', params='',
           query='', fragment='')

schema 引数が指定されている場合、URLで指定されていない場合にのみ使用される、デフォルトのアドレス指定スキームが提供されます。 この引数のデフォルト値は空の文字列です。

allow_fragments 引数がfalseの場合、URLのアドレス指定スキームが通常サポートしていても、フラグメント識別子は前のコンポーネントの一部として認識および解析されません。 この引数のデフォルト値は True です。

戻り値は、実際には tuple のサブクラスのインスタンスです。 このクラスには、次の追加の読み取り専用の便利な属性があります。

属性

索引

価値

存在しない場合の値

scheme

0

URLスキーム指定子

スキームパラメーター

netloc

1

ネットワークロケーション部分

空の文字列

path

2

階層パス

空の文字列

params

3

最後のパス要素のパラメーター

空の文字列

query

4

クエリコンポーネント

空の文字列

fragment

5

フラグメント識別子

空の文字列

username

ユーザー名

None

password

パスワード

None

hostname

ホスト名(小文字)

None

port

整数としてのポート番号(存在する場合)

None

結果オブジェクトの詳細については、セクション urlparse()およびurlsplit()の結果を参照してください。

netloc属性の文字で、NFKC正規化(IDNAエンコーディングで使用)の下で/?#@、または:ValueErrorを発生させます。 URLが解析前に分解されている場合、またはUnicode文字列でない場合、エラーは発生しません。

バージョン2.5で変更:戻り値に属性を追加しました。

バージョン2.7で変更: IPv6URL解析機能が追加されました。

バージョン2.7.17で変更: NFKC正規化でのnetloc解析に影響する文字は、ValueErrorを発生させるようになりました。

urlparse.parse_qs(qs[, keep_blank_values[, strict_parsing[, max_num_fields]]])

文字列引数として指定されたクエリ文字列を解析します(タイプ application / x-www-form-urlencoded のデータ)。 データは辞書として返されます。 ディクショナリキーは一意のクエリ変数名であり、値は各名前の値のリストです。

オプションの引数 keep_blank_values は、パーセントエンコードされたクエリの空白値を空白文字列として扱うかどうかを示すフラグです。 真の値は、ブランクをブランク文字列として保持する必要があることを示します。 デフォルトのfalse値は、空白の値が無視され、含まれていないかのように扱われることを示します。

オプションの引数 strict_parsing は、解析エラーの処理方法を示すフラグです。 false(デフォルト)の場合、エラーは黙って無視されます。 trueの場合、エラーはValueError例外を発生させます。

オプションの引数 max_num_fields は、読み取るフィールドの最大数です。 設定されている場合、読み取られたフィールドが max_num_fields を超えると、ValueErrorがスローされます。

urllib.urlencode()関数を使用して、このような辞書をクエリ文字列に変換します。

バージョン2.6の新機能: cgi モジュールからコピー。

バージョン2.7.16で変更: max_num_fields パラメーターが追加されました。

urlparse.parse_qsl(qs[, keep_blank_values[, strict_parsing[, max_num_fields]]])

文字列引数として指定されたクエリ文字列を解析します(タイプ application / x-www-form-urlencoded のデータ)。 データは、名前と値のペアのリストとして返されます。

オプションの引数 keep_blank_values は、パーセントエンコードされたクエリの空白値を空白文字列として扱うかどうかを示すフラグです。 真の値は、ブランクをブランク文字列として保持する必要があることを示します。 デフォルトのfalse値は、空白の値が無視され、含まれていないかのように扱われることを示します。

オプションの引数 strict_parsing は、解析エラーの処理方法を示すフラグです。 false(デフォルト)の場合、エラーは黙って無視されます。 trueの場合、エラーはValueError例外を発生させます。

オプションの引数 max_num_fields は、読み取るフィールドの最大数です。 設定されている場合、読み取られたフィールドが max_num_fields を超えると、ValueErrorがスローされます。

urllib.urlencode()関数を使用して、このようなペアのリストをクエリ文字列に変換します。

バージョン2.6の新機能: cgi モジュールからコピー。

バージョン2.7.16で変更: max_num_fields パラメーターが追加されました。

urlparse.urlunparse(parts)
urlparse()によって返されるタプルからURLを作成します。 parts 引数は、任意の6項目の反復可能にすることができます。 これにより、解析されたURLに元々不要な区切り文字(たとえば、?)が含まれていた場合、わずかに異なるが同等のURLになる可能性があります。 空のクエリで; RFCは、これらは同等であると述べています)。
urlparse.urlsplit(urlstring[, scheme[, allow_fragments]])

これは urlparse()に似ていますが、URLからパラメーターを分割しません。 URLのパス部分の各セグメントにパラメーターを適用できる最新のURL構文の場合は、通常、 urlparse()の代わりにこれを使用する必要があります( [X190Xを参照) ] RFC 2396 )が必要です。 パスセグメントとパラメータを分離するには、別の関数が必要です。 この関数は5タプルを返します:(アドレス指定スキーム、ネットワークの場所、パス、クエリ、フラグメント識別子)。

戻り値は、実際には tuple のサブクラスのインスタンスです。 このクラスには、次の追加の読み取り専用の便利な属性があります。

属性

索引

価値

存在しない場合の値

scheme

0

URLスキーム指定子

スキームパラメーター

netloc

1

ネットワークロケーション部分

空の文字列

path

2

階層パス

空の文字列

query

3

クエリコンポーネント

空の文字列

fragment

4

フラグメント識別子

空の文字列

username

ユーザー名

None

password

パスワード

None

hostname

ホスト名(小文字)

None

port

整数としてのポート番号(存在する場合)

None

結果オブジェクトの詳細については、セクション urlparse()およびurlsplit()の結果を参照してください。

netloc属性の文字で、NFKC正規化(IDNAエンコーディングで使用)の下で/?#@、または:ValueErrorを発生させます。 URLが解析前に分解されている場合、またはUnicode文字列でない場合、エラーは発生しません。

バージョン2.2の新機能。

バージョン2.5で変更:戻り値に属性を追加しました。

バージョン2.7.17で変更: NFKC正規化でのnetloc解析に影響する文字は、ValueErrorを発生させるようになりました。

urlparse.urlunsplit(parts)

urlsplit()によって返されるタプルの要素を文字列として完全なURLに結合します。 parts 引数は、任意の5項目の反復可能にすることができます。 これにより、解析されたURLに元々不要な区切り文字(たとえば、?)が含まれていた場合、わずかに異なるが同等のURLになる可能性があります。 空のクエリで; RFCは、これらは同等であると述べています)。

バージョン2.2の新機能。

urlparse.urljoin(base, url[, allow_fragments])

「ベースURL」(ベース)を別のURL( url )と組み合わせて、完全な(「絶対」)URLを作成します。 非公式には、これはベースURLのコンポーネント、特にアドレス指定スキーム、ネットワークの場所、およびパス(の一部)を使用して、相対URLに欠落しているコンポーネントを提供します。 例えば:

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

allow_fragments 引数は、 urlparse()と同じ意味とデフォルトを持っています。

ノート

url が絶対URL(つまり、//またはscheme://で始まる)の場合、 url のホスト名および/またはスキームは結果に存在します。 例えば:

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

この動作を望まない場合は、 urlurlsplit()および urlunsplit()で前処理し、可能なスキームおよびを削除します。 ] netloc パーツ。

urlparse.urldefrag(url)
url にフラグメント識別子が含まれている場合、フラグメント識別子のない url の修正バージョンを返し、フラグメント識別子を別の文字列として返します。 url にフラグメント識別子がない場合、 url は変更されずに空の文字列を返します。

も参照してください

RFC 3986 -ユニフォームリソース識別子
これは現在の標準(STD66)です。 urlparseモジュールへの変更は、これに準拠する必要があります。 特定の逸脱が観察される可能性があります。これは主に下位互換性の目的であり、主要なブラウザで一般的に観察される特定の事実上の解析要件のためです。
RFC 2732 -URL内のリテラルIPv6アドレスの形式。
これは、IPv6URLの解析要件を指定します。
RFC 2396 -URI(Uniform Resource Identifiers):一般的な構文
ユニフォームリソースネーム(URN)とユニフォームリソースロケーター(URL)の両方の一般的な構文要件を説明するドキュメント。
RFC 2368 -mailtoURLスキーム。
mailtoURLスキームの解析要件。
RFC 1808 -相対ユニフォームリソースロケーター
このRequestFor Commentsには、国境のケースの処理を管理するかなりの数の「異常な例」を含む、絶対URLと相対URLを結合するためのルールが含まれています。
RFC 1738 -ユニフォームリソースロケーター(URL)
これは、絶対URLの正式な構文とセマンティクスを指定します。


20.16.1。 の結果 urlparse() と urlsplit()

urlparse()および urlsplit()関数の結果オブジェクトは、 tuple タイプのサブクラスです。 これらのサブクラスは、これらの関数で説明されている属性を追加するだけでなく、追加のメソッドを提供します。

ParseResult.geturl()

元のURLの再結合されたバージョンを文字列として返します。 これは、スキームが常に小文字に正規化され、空のコンポーネントが削除される可能性があるという点で、元のURLとは異なる場合があります。 具体的には、空のパラメーター、クエリ、およびフラグメント識別子が削除されます。

このメソッドの結果は、元の解析関数を介して渡された場合の固定小数点になります。

>>> import urlparse
>>> url = 'HTTP://www.Python.org/doc/#'
>>> r1 = urlparse.urlsplit(url)
>>> r1.geturl()
'http://www.Python.org/doc/'
>>> r2 = urlparse.urlsplit(r1.geturl())
>>> r2.geturl()
'http://www.Python.org/doc/'

バージョン2.5の新機能。

次のクラスは、解析結果の実装を提供します。

class urlparse.ParseResult(scheme, netloc, path, params, query, fragment)
urlparse()結果の具象クラス。
class urlparse.SplitResult(scheme, netloc, path, query, fragment)
urlsplit()結果の具象クラス。