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

  • 27
    いいね
  • 0
    コメント

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

参考