web-dev-qa-db-ja.com

URLのエスケープ文字をデコードします

エスケープ文字を含むURLを含むリストがあります。これらの文字は、HTMLページを回復するときにurllib2.urlopenによって設定されています。

http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&action=edit
http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&action=history
http://www.sample1webpage.com/index.php?title=%E9%A6%96%E9%A1%B5&variant=zh 

それらをPythonでエスケープされていない形式に戻す方法はありますか?

追伸:URLはutf-8でエンコードされています

72
Tony

公式ドキュメント

_urllib.unquote(_string_)_

_%xx_エスケープを同等の単一文字に置き換えます。

例:unquote('/%7Econnolly/')は_'/~connolly/'_を生成します。

そして、デコードするだけです。


更新:Python 3の場合、次のように記述します。

_urllib.parse.unquote(url)
_

Python 3のドキュメント

123

Python3を使用している場合は、次を使用できます。

urllib.parse.unquote(url)
25

または urllib.unquote_plus

>>> import urllib
>>> urllib.unquote('erythrocyte+membrane+protein+1%2C+PfEMP1+%28VAR%29')
'erythrocyte+membrane+protein+1,+PfEMP1+(VAR)'
>>> urllib.unquote_plus('erythrocyte+membrane+protein+1%2C+PfEMP1+%28VAR%29')
'erythrocyte membrane protein 1, PfEMP1 (VAR)'
9
dli
import re

def unquote(url):
  return re.compile('%([0-9a-fA-F]{2})',re.M).sub(lambda m: chr(int(m.group(1),16)), url)
4
mistercx