Edited at

PythonのURLとクエリパラメータのパースまとめ

More than 1 year has passed since last update.


tl;dr

ここでは、PythonでのURLやクエリパラメータの解析、パーセントエンコーディングの変換方法をまとめています。

なお、Python3ではURLの取得や解析等のモジュールがurllibに統一されています。以下に簡単に対応表をまとめました。

Python2
Python3

URLパース
urlparse.urlparse
urllib.parse.urlparse

クエリ文字列解析
urlparse.parse_qs
urllib.parse.parse_qs

クエリパラメータ作成
urllib.urlencode
urllib.parse.urlencode

エスケープ
urllib.quote
urllib.parse.quote

エスケープ復元
urllib.unquote
urllib.parse.unquote


Python3

以下のコードはurllibのインポートを前提としています。

import urllib


URLのパース

urllib.parse.urlparse("http://example.com/example.html?foo=bar&hoge=fuga")

# => ParseResult(scheme='http', netloc='example.com', path='/example.html', params='', query='foo=bar&hoge=fuga', fragment='')


クエリパラメータのパース

urllib.parse.parse_qs("foo=bar&hoge=fuga")

# => {'hoge': ['fuga'], 'foo': ['bar']}

urllib.parse.parse_qs("query=%E3%83%86%E3%82%B9%E3%83%88")

# => {'query': ['テスト']}


辞書からクエリパラメータ作成

urllib.parse.urlencode({"query":"テスト"})

# => query=%E3%83%86%E3%82%B9%E3%83%88


パーセントエンコーディング文字列の変換

urllib.parse.quote("テスト")

# => %E3%83%86%E3%82%B9%E3%83%88

urllib.parse.unquote("%E3%83%86%E3%82%B9%E3%83%88")
# => テスト


Python2

以下のコードはurllibおよびurlparseのインポートを前提としています。

import urllib

import urlparse


URLのパース

urlparse.urlparse("http://example.com/example.html?foo=bar&hoge=fuga")

# => ParseResult(scheme='http', netloc='example.com', path='/example.html', params='', query='foo=bar&hoge=fuga', fragment='')


クエリパラメータのパース

urlparse.parse_qs("foo=bar&hoge=fuga")

# => {'hoge': ['fuga'], 'foo': ['bar']}

urlparse.parse_qs("query=%E3%83%86%E3%82%B9%E3%83%88")

# => {'query': ['テスト']}

http://docs.python.jp/2/library/urlparse.html#urlparse.parse_qs


辞書からクエリパラメータ作成

urllib.urlencode({"query":"テスト"})

# => query=%E3%83%86%E3%82%B9%E3%83%88


パーセントエンコーディング文字列の変換

urllib.quote("テスト")

# => %E3%83%86%E3%82%B9%E3%83%88

urllib.unquote("%E3%83%86%E3%82%B9%E3%83%88")
# => テスト


参考