本日はPythonでURLのエンコード、デコードについて解説していきます。
URLをエンコードやデコードすることは、ウェブ開発やデータ処理において非常に重要です。
URLには様々な特殊文字や日本語などの文字が含まれる場合がありますが、これらを適切に扱わないと予期せぬエラーが発生する可能性があります。
そこでPythonでは標準ライブラリやサードパーティのモジュールを使用して、URLをエンコードやデコードする方法が提供されています。
本記事では、quote、unquote、urlparse、parse_qsなどのurllibモジュールのメソッドを活用して、URLを文字列として操作する方法について解説していきます。
また動画もあるので必要に応じて活用してください。
Pythonのurllibモジュールを使って日本語を変換する
日本語はそのままだとURLの一部として含めることができません。
そのためパース(変換)で記号や英語などの別の文字にする必要があり、一般的にはurllibモジュールの quoteメソッドを使うことになります。
from urllib import parse
text = "おはよう"
text = parse.quote(text)
print(text) # %E3%81%8A%E3%81%AF%E3%82%88%E3%81%86と表示される
一度パースしたとしても文字列の日本語として読める状態に戻すことができます。
その際にはunquoteというメソッドを使います。
from urllib import parse
text = "おはよう"
text = parse.quote(text)
print(text) # %E3%81%8A%E3%81%AF%E3%82%88%E3%81%86と表示される
# ここを追加
text = parse.unquote(text)
print(text) # 「おはよう」と表示される
実務ではURLの中にいろんな情報が含まれているので一度分解して、特定の部分だけを変換することになります。
その分解についてはurlparseというメソッドを使用します。
from urllib import parse
url = "https://lorem-co-ltd.com/tips"
url = parse.urlparse(url)
print(url)
urlparseでURLを分解するとParseResultというオブジェクト形式になって返ってきます。
あとはそれぞれのプロパティを指定すれば取り出すことができます。
from urllib import parse
url = "https://lorem-co-ltd.com/tips"
url = parse.urlparse(url)
# ここを追加
print(url.scheme) # https
print(url.netloc) # lorem-co-ltd.com
print(url.path) # /tips
AmazonなどWebサイトを使っているときにURLがよくわからない文字の羅列になっているのを見たことがあるはずです。
例えば以下のURLはAmazonで「お茶」というキーワードで検索したときのURLです。
urllibモジュールのparse.parse_qsメソッドというものにhttps://www.amazon.co.jp/以降の文字を入れるとクエリの内容を解析できたりします。
from urllib import parse
query = "s?k=%E3%81%8A%E8%8C%B6&__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&crid=T0SUYWS9G4RV&sprefix=%E3%81%8A%E8%8C%B6%2Caps%2C309&ref=nb_sb_noss_1"
query = parse.parse_qs(query)
print(query)
あの長いURLにはいろんな情報が詰まっていることがわかりますね。