URL操作したい(urllib.parse
)
1from urllib.parse import urlparse, urlsplit
2
3o = urlparse("https://example.com/path1/path2/path3.html?key1=value1&key2=value2#frag1)
4# o = urlsplit("https://example.com/path1/path2/path3.html?key1=value1&key2=value2#frag1)
5print(f"{o.scheme=}") # https
6print(f"{o.netloc=}") # example.com
7print(f"{o.path=}") # /path1/path2/path3.html
8print(f"{o.query=}") # key1=value1&key2=value2
9print(f"{o.fragment=}") # frag1
urllib.parse
は標準モジュールです。
urlparse
やurlsplit
、parse_qs
といったURLやクエリを抽出するメソッドを持っています。
URLにアクセスすることなく、文字列操作できるのが便利です。
クエリを取り出したい(parse_qs
/ parse_qsl
)
1from urllib.parse import urlparse, parse_qs
2o = urlparse("https://example.com/path1/path2/path3.html?key1=value1&key2=value2#frag1)
3
4parse_qs(o.query) # {"key1": ["value1"], "key2": ["value2"]}
5parse_qsl(o.query) # [("key1", "value1"), ("key2", "value2")]
parse_qs
でクエリを辞書型、
parse_qsl
でクエリをリスト型に変換できます。
1# 辞書型(parse_qs)
2response = requests.get(url="https://httpbin.org/get", params=parse_qs(o.query))
3
4# リスト型(parse_qsl)
5response = requests.get(url="https://httpbin.org/get", params=parse_qsl(o.query))
どちらの結果もrequestsのparams
に直接渡すことができます。
クエリを文字列にしたい(urlencode
)
1from urllib.parse import urlencode
2
3q1 = {"key1": "value1", "key2": "value2"}
4q2 = [("key1", "value1"), ("key2": "value2")]
5
6urlencode(q1, doseq=True) # key1=value1&key2=value2
7urlencode(q2, doseq=True) # key1=value1&key2=value2
urlencode
で、辞書型/リスト型になっているクエリを文字列に変換できます。
doseq=True
オプションが必須です。
parse_qs
/ parse_qsl
で取得したオブジェクトも復元できます。