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")
# => テスト