Verwendung urllib.quote
oder urllib.quote_plus
Vom urllib documentation:
Zitat (string [, safe])
ersetzen Sonderzeichen in der Zeichenkette mit dem "% xx" escape. Buchstaben, Ziffern, und die Zeichen "_.-" sind nie zitiert. Der optionale sichere Parameter gibt zusätzliche Zeichen an, die nicht in Anführungszeichen gesetzt werden sollen. - der Standardwert ist '/'. Beispiel: quote('/~connolly/')
ergibt '/%7econnolly/'
.
quote_plus (string [, safe])
Wie quote(), sondern ersetzt auch Leerzeichen durch Pluszeichen, je nach Bedarf für die Quotierung HTML-Formular Werte. Plus-Zeichen in der ursprünglichen Zeichenfolge sind escaped, es sei denn sie sind in Safe enthalten. Es hat auch nicht sicheren Standard auf "/".
EDIT: Mit urllib.quote oder urllib.quote_plus auf die gesamte URL wird es mangle, wie @ ΤΖΩΤΖΙΟΥ betont:
>>> quoted_url = urllib.quote('http://www.example.com/foo goo/bar.html')
>>> quoted_url
'http%3A//www.example.com/foo%20goo/bar.html'
>>> urllib2.urlopen(quoted_url)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\python25\lib\urllib2.py", line 124, in urlopen
return _opener.open(url, data)
File "c:\python25\lib\urllib2.py", line 373, in open
protocol = req.get_type()
File "c:\python25\lib\urllib2.py", line 244, in get_type
raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: http%3A//www.example.com/foo%20goo/bar.html
@ ΤΖΩΤΖΙΟΥ bietet eine Funktion, die urlparse.urlparse and urlparse.urlunparse die URL zu analysieren verwendet und kodiere nur den Pfad. Dies kann für Sie nützlicher sein. Wenn Sie jedoch die URL aus einem bekannten Protokoll und Host mit einem fehlerverdächtigen Pfad erstellen, können Sie wahrscheinlich genauso gut urlparse vermeiden und einfach den verdächtigen Teil der URL angeben, mit dem verkettet werden soll bekannte sichere Teile.
Es gibt eine mehr up-to-date Antwort auf StackOverflow hier: http://stackoverflow.com/questions/10584861/canonize-normali ze-an-url-in-python/15629657 – stuckintheshuck
Ich glaube nicht, dass das besser ist ... –