Python 標準ライブラリ urllib.parse URLの解析

--

標準ライブラリurllib.parseには、URLの解析をするための関数が用意されている。

URLの解析

import urllib.parseurl = urllib.parse.urlparse('http://www.example.jp:80/test/path?q=some value&r=http://user@example.com/&search=a+b,c;$')
# => ParseResult(scheme='http', netloc='www.example.jp:80', path='/test/path', params='', query='q=some value&r=http://user@example.com/&search=a+b,c;$', fragment='')
urllib.parse.urlsplit('http://www.example.jp:80/test/path?q=some value&r=http://user@example.com/&search=a+b,c;$')
# => SplitResult(scheme='http', netloc='www.example.jp:80', path='/test/path', query='q=some value&r=http://user@example.com/&search=a+b,c;$', fragment='')

URLクエリーの解析

urllib.parse.parse_qs('key1=value1&key2=&test%3Da%26da%20a a=xyz')
# => {'key1': ['value1'], 'test=a&da a a': ['xyz']}
urllib.parse.parse_qs('key1=value1&key2=&test%3Da%26da%20a a=xyz', keep_blank_values=True)
# => {'key1': ['value1'], 'key2': [''], 'test=a&da a a': ['xyz']}
urllib.parse.parse_qsl('key1=value1&key2=&test%3Da%26da%20a a=xyz')
# => [('key1', 'value1'), ('test=a&da a a', 'xyz')]
urllib.parse.parse_qsl('key1=value1&key2=&test%3Da%26da%20a a=xyz', keep_blank_values=True)
# => [('key1', 'value1'), ('key2', ''), ('test=a&da a a', 'xyz')]

URLの要素からURLを組み立てる

urllib.parse.urlunparse(('http', 'www.example.jp:80', '/test/path', '', 'q=some value&r=http://user@ex
# => 'http://www.example.jp:80/test/path?q=some value&r=http://user@example.com/&search=a+b,c;$'
urllib.parse.urlunsplit(('http', 'www.example.jp:80', '/test/path', '', 'q=some value&r=http://user@example.com/&search=a+b,c;$'))
# => 'http://www.example.jp:80/test/path#q=some value&r=http://user@example.com/&search=a+b,c;$'

URLの結合

urllib.parse.urljoin('https://www.example.jp/a/b/c.txt','/x/y.txt')
# => 'https://www.example.jp/x/y.txt'
urllib.parse.urljoin('https://www.example.jp/a/b/c.txt','x/y.txt')
# => 'https://www.example.jp/a/b/x/y.txt'

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

data = {}
data['key1'] = 'value1'
data['key2'] = 'value2'
urllib.parse.urlencode(data) # => key1=value1&key2=value2

参考

--

--