Розшифруйте символи, що бігли в URL


83

У мене є список, що містить 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

Відповіді:


144

Офіційні документи.

urllib.unquote(рядок)

Замініть %xxекранні переходи на їх односимвольний еквівалент.

Приклад: unquote('/%7Econnolly/')урожайність '/~connolly/'.

А потім просто розшифруйте.


Оновлення: Для Python 3 напишіть таке:

import urllib.parse
urllib.parse.unquote(url)

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


цитата демонструється, як я вже говорив вище sample.com/index.php?title=\xe9\xa6\x96\xe9\xa1\xb5&action=edi ... можливо, я не дуже добре пояснив себе в цьому випадку ... але url - китайський, і я хочу розшифрувати його до оригінального символу, а не до цитування
Тоні

3
@dyoser Вам потрібно поставити це у своєму питанні.
Kris Harper

@ root45 це коментар до однієї відповіді ... так що тут добре. Дякуємо за вашу вдячність.
Тоні

11
Просто до відома , що для Python3, цеurllib.parse.unquote
Тайфун

4
Для python3 це також єurllib.request.unquote
Бен,


11

або 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)'

7

Можна використовувати urllib.unquote


коли я використовую кінець цитати (спасибі, до речі ...) він показує цей рядок sample.com/index.php?title= \ xE9 \ xa6 \ x96 \ xE9 \ xa1 \ XB5 і дію = EDi і я знаю , що вони китайські символи ... як я можу їх бачити? Думаю, це унікод, так?
Тоні

Це вже у вашому питанні. Це байти UTF-8; ви можете перетворити їх у Unicode-рядок за b"\xe9\xa6\x96\xe9\xa1\xb5".decode("utf-8")допомогою (використовуючи дещо сучасніший синтаксис Python зараз).
триплі

5
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)

8
Чому б вам використовувати вручну регулярні вирази та лямбда, коли є вбудована бібліотека, яка робить те, що вам потрібно, можливо, навіть більш вдумливо?
Brad Koch

6
Класне рішення! urllib2не є частиною стандартного дистрибутива python. reє.
cxxl
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.