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

python escaping

79219 просмотра

5 ответа

У меня есть список, содержащий 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?

PS: URL-адреса закодированы в UTF-8

Автор: Tony Источник Размещён: 12.11.2019 09:38

Ответы (5)


125 плюса

Решение

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

urllib.unquote(строка)

Замените %xxescape-символы их односимвольным эквивалентом.

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

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


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

urllib.parse.unquote(url)

Python 3 документа.

Автор: Ignacio Vazquez-Abrams Размещён: 15.11.2011 01:09

25 плюса

И если вы используете, Python3вы можете использовать:

urllib.parse.unquote(url)
Автор: Vladir Parrado Cruz Размещён: 04.01.2016 03:03

9 плюса

или же 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)'
Автор: dli Размещён: 10.12.2015 04:27

7 плюса

Вы можете использовать urllib.unquote

Автор: Klaus Byskov Pedersen Размещён: 15.11.2011 01:09

4 плюса

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)
Автор: mistercx Размещён: 26.03.2013 12:27
Вопросы из категории :
32x32