Python 標準ライブラリ urllib.parse URLの解析
Feb 9, 2022
標準ライブラリ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