Dekodieren Sie maskierte Zeichen in der URL

83

Ich habe eine Liste mit URLs mit Escapezeichen. Diese Zeichen wurden festgelegt, urllib2.urlopenwenn die HTML-Seite wiederhergestellt wird:

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 

Gibt es eine Möglichkeit, sie in Python wieder in ihre entflohene Form zu verwandeln?

PS: Die URLs sind in utf-8 codiert

Tony
quelle

Antworten:

144

Offizielle Dokumente.

urllib.unquote(Zeichenfolge)

Ersetzen Sie %xxEscapezeichen durch ihre einstelligen Entsprechungen.

Beispiel: unquote('/%7Econnolly/')Ausbeuten '/~connolly/'.

Und dann einfach dekodieren.


Update: Schreiben Sie für Python 3 Folgendes:

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

Python 3-Dokumente.

Ignacio Vazquez-Abrams
quelle
Das unquote zeigt, wie ich oben sagte sample.com/index.php?title=\xe9\xa6\x96\xe9\xa1\xb5&action=edi ... vielleicht habe ich mich in diesem Fall nicht sehr gut erklärt ... aber das URL ist eine chinesische und ich möchte zu seinem ursprünglichen Zeichen entschlüsseln, nicht zu dem nicht zitierten
Tony
3
@dyoser Sie müssen dies in Ihre Frage setzen.
Kris Harper
@ root45 Dies ist ein Kommentar zu einer Antwort ... also ist es hier richtig gut. Dank für Ihr Verständnis.
Tony
11
Nur eine Anmerkung, dass für Python3 dies isturllib.parse.unquote
tayfun
4
Für Python3 ist es auch inurllib.request.unquote
Ben
30

Und wenn Sie verwenden, können Python3Sie verwenden:

import urllib.parse
urllib.parse.unquote(url)
Vladir Parrado Cruz
quelle
Auch inurllib.request.unquote
Ben
11

oder 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
quelle
7

Sie können verwenden urllib.unquote

Klaus Byskov Pedersen
quelle
Wenn ich das unquote benutze (danke übrigens ...), zeigt es diese Zeichenfolge sample.com/index.php?title= \ xe9 \ xa6 \ x96 \ xe9 \ xa1 \ xb5 & action = edi und ich weiß, dass es sich um chinesische Zeichen handelt ... wie kann ich sie sehen? Ich denke das ist Unicode, oder?
Tony
Das ist schon in deiner Frage. Das sind die UTF-8-Bytes; Sie können sie mit b"\xe9\xa6\x96\xe9\xa1\xb5".decode("utf-8")(jetzt mit etwas modernerer Python-Syntax) in eine Unicode-Zeichenfolge konvertieren .
Tripleee
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)
mistercx
quelle
8
Warum sollten Sie Regex und Lambdas manuell verwenden, wenn es eine integrierte Bibliothek gibt, die das tut, was Sie brauchen, wahrscheinlich noch nachdenklicher?
Brad Koch
6
Coole Lösung! urllib2ist nicht Teil von Standard Python Distri. reist.
cxxl