Python

Pythonで%の付いたURLを変換するには?

Pythonで%の付いたURLを変換するには?
時折、「%」が含まれたURLを扱うことがあります。
例えば、Wikipediaがそうで、「https://ja.wikipedia.org/wiki/%E5%B0%86%E6%A3%8B」と、日本語の部分が「%」付きで変換されています。
この「%」の部分を人間が読むためにはどうしたら良いのか?
Pythonで変換する方法をまとめます。

 

「%」の付いているURLの正体は?

パーセントエンコーディング(percent encoding)と、呼ばれるもので、URLに使えない文字列を使うための変換手法です。
一般的には「URLエンコーディング」とも呼ばれるそうです。

 

Pythonで変換するには?

標準ライブラリ「urllib」の「parse」を使います。

import urllib.parse

 

「%」付きURLを読めるように変換するには?

「urllib.parse.unquote()」を使います。

import urllib.parse
 
print(urllib.parse.unquote('https://ja.wikipedia.org/wiki/%E5%B0%86%E6%A3%8B'))
# ⇒ https://ja.wikipedia.org/wiki/将棋

 

日本語を「%」付きURLに変換するには?

「urllib.parse.quote()」を使います。
デフォルトの設定では「:(コロン)」も変換されてしまうので、引数「safe」に「':/'」を指定します。

import urllib.parse
 
print(urllib.parse.quote('https://オンライン将棋教室・香.com/'))
# ⇒ https%3A//%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E5%B0%86%E6%A3%8B%E6%95%99%E5%AE%A4%E3%83%BB%E9%A6%99.com/
# 「:(コロン)」までパーセントエンコーディングされてしまう
 
print(urllib.parse.quote('https://オンライン将棋教室・香.com/',safe=':/'))
# ⇒ https://%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E5%B0%86%E6%A3%8B%E6%95%99%E5%AE%A4%E3%83%BB%E9%A6%99.com/
# 「safe」に「:(コロン)」と「/(スラッシュ)」を指定するとブラウザで読み込めるURLに変換される

 

公式ドキュメントへのリンク

詳しくは公式ドキュメントをご覧ください。
https://docs.python.org/ja/3/library/urllib.parse.html#module-urllib.parse

 

まとめ

パーセントエンコーディングされたURLをPythonで変換するには、標準ライブラリ「urllib」を使えば良いです。
最初は自分で変換コードを作らなくちゃと思っていたので、先人にただただ感謝しています。

-Python
-, , , , , , , , , , ,