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

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.


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)

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

7

Sie können verwenden urllib.unquote


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)

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
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.