Декодирование экранированных символов в URL


у меня есть список, содержащий URL-адреса с экранированными символами в них. Эти символы были установлены с помощью urllib2.urlopen когда он восстанавливает html-страницу:

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

5 55

5 ответов:

официальные документы.

urllib.unquote(строка)

заменить %xx экранирует их односимвольный эквивалент.

пример: unquote('/%7Econnolly/') доходность '/~connolly/'.

а потом просто расшифровать.


обновление: Для Python 3 напишите следующее:

urllib.parse.unquote(url)

Python 3 docs.

Если вы используете Python3 вы могли бы использовать:

urllib.parse.unquote(url)

или 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)'

можно использовать urllib.unquote

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)