Angenommen, ich habe eine URL erhalten.
Es hat möglicherweise bereits GET-Parameter (z. B. http://example.com/search?q=question
) oder nicht (z http://example.com/
. B. ).
Und jetzt muss ich einige Parameter hinzufügen, wie {'lang':'en','tag':'python'}
. Im ersten Fall werde ich haben http://example.com/search?q=question&lang=en&tag=python
und im zweiten - http://example.com/search?lang=en&tag=python
.
Gibt es eine Standardmethode, um dies zu tun?
urlparse.parse_qs
anstelle von verwendenparse_qsl
. Letzterer gibt eine Liste zurück, während Sie ein Diktat wünschen. Siehe docs.python.org/library/urlparse.html#urlparse.parse_qs .urlencode
als aufrufenurllib.urlencode(query, doseq=True)
. Andernfalls werden Parameter, die in der ursprünglichen URL vorhanden waren, nicht korrekt beibehalten (da sie als Tupel von @ parse_qs @urlparse()
undurlsplit()
sind tatsächlichnamedtuple
Instanzen. Auf diese Weise können Sie sie direkt einer Variablen zuweisen undurl_parts = url_parts._replace(query = …)
zum Aktualisieren verwenden.Warum
Ich war nicht mit allen Lösungen auf dieser Seite zufrieden ( komm schon, wo ist unser Lieblings-Copy-Paste-Ding? ), Also habe ich meine eigenen basierend auf den Antworten hier geschrieben. Es versucht, vollständiger und pythonischer zu sein. Ich habe einen Handler für dict- und bool- Werte in Argumenten hinzugefügt , um verbraucherseitiger ( JS ) zu sein, aber sie sind noch optional. Sie können sie löschen.
Wie es funktioniert
Test 1: Hinzufügen neuer Argumente, Umgang mit Arrays und Bool-Werten:
Test 2: Umschreiben vorhandener Argumente, Behandeln von DICT-Werten:
Reden ist billig. Zeig mir den Code.
Code selbst. Ich habe versucht, es im Detail zu beschreiben:
Bitte beachten Sie, dass es einige Probleme geben kann. Wenn Sie eines finden, lassen Sie es mich bitte wissen und wir werden diese Sache verbessern
quelle
http://stackoverflow.com/with%2Fencoded?data=some&data=values&answe%2rs=false
. Verwenden Sie außerdem drei Chevrons>>>
, um den Dozenten dabei zu helfen, Ihre Doktrinen abzuholenparsed_get_args = dict(parse_qsl(get_args))
zuparsed_get_args = parse_qs(get_args)
Sie möchten die URL-Codierung verwenden, wenn die Zeichenfolgen beliebige Daten enthalten können (z. B. müssen Zeichen wie kaufmännisches Und, Schrägstriche usw. codiert werden).
Überprüfen Sie urllib.urlencode:
In Python3:
quelle
Sie können auch das Furl-Modul https://github.com/gruns/furl verwenden
quelle
Lagern Sie es in die Bibliothek für kampferprobte Anfragen aus .
So werde ich es machen:
quelle
Wenn Sie die Anfragen lib verwenden :
quelle
Ja: benutze urllib .
Aus den Beispielen in der Dokumentation:
quelle
Basierend auf dieser Antwort Einzeiler für einfache Fälle (Python 3-Code):
oder:
quelle
?
Anker im Anker befindet (#?stuff
).Ich finde das eleganter als die beiden Top-Antworten:
Die wichtigsten Dinge, die ich in den Top-Antworten nicht mag (sie sind trotzdem gut):
query
in den URL-Komponenten befindetParseResult
Was an meiner Antwort schlecht ist, ist die magisch aussehende
dict
Zusammenführung beim Entpacken, aber ich ziehe es vor, ein bereits vorhandenes Wörterbuch zu aktualisieren, weil ich Vorurteile gegen Veränderlichkeit habe.quelle
Ich mochte die Łukasz-Version, aber da die Verwendung der Funktionen urllib und urllparse in diesem Fall etwas umständlich ist, ist es meiner Meinung nach einfacher, so etwas zu tun:
quelle
Verwenden Sie die verschiedenen
urlparse
Funktionen, um die vorhandene URLurllib.urlencode()
im kombinierten Wörterbuch auseinander zu reißenurlparse.urlunparse()
und alles wieder zusammenzusetzen.Oder nehmen Sie einfach das Ergebnis von
urllib.urlencode()
und verknüpfen Sie es entsprechend mit der URL.quelle
Noch eine Antwort:
quelle
Hier ist, wie ich es implementiert habe.
Lief wie am Schnürchen. Ich hätte mir jedoch einen saubereren Weg gewünscht, um dies umzusetzen.
Eine andere Möglichkeit, das oben Gesagte zu implementieren, besteht darin, es in eine Methode zu integrieren.
quelle
In Python 2.5
quelle