Einführung in Urljoin in Python
Dieses Tutorial beschreibt Python urljoin
und sein Verhalten bei der Verwendung. Es demonstriert auch die Verwendung von urljoin
in Python anhand verschiedener Beispielcodes.
Einführung in urljoin
in Python
URLs enthalten normalerweise wichtige Informationen, die bei der Bewertung einer Website, der Suche eines Teilnehmers oder der Anordnung des Materials in den einzelnen Bereichen verwendet werden können.
Auch wenn URLs manchmal ziemlich komplex erscheinen, kommt Python mit verschiedenen wertvollen Bibliotheken, die es ermöglichen, URLs zu parsen, zu verknüpfen und die Bestandteile der URLs abzurufen.
Das urllib
-Paket in Python 3 ermöglicht es Benutzern, Websites aus ihrem Skript heraus zu erkunden, und enthält mehrere Module zur Verwaltung von URL-Funktionen wie urljoin()
.
Die Bibliothek urllib
ist entscheidend, wenn eine URL in der Python-Programmierung verwendet wird, die es Benutzern ermöglicht, Websites mit ihrem Universal Resource Locator zu besuchen und mit ihnen zu interagieren.
Außerdem bietet diese Bibliothek weitere Pakete wie urllib.request
, urllib.error
, urllib.parse
und urllib.robotparser
.
Verwendung der urljoin()
-Methode
Die Methode urljoin()
ist hilfreich, wenn viele zusammengehörige URLs benötigt werden. Beispielsweise URLs für eine Reihe von Seiten, die für eine Website generiert werden sollen, und Hinzufügen neuer Werte zur Basis-URL.
Syntax:
urljoin(baseurl, newurl, allowFrag=None)
Nach dem Aufbau einer vollständigen URL durch Kombinieren einer Basis-URL (baseurl
) mit einer anderen URL (newurl
) werden informell Teile der Basis-URL als Adressierungsschema, der Netzwerkstandort und der Pfad verwendet, um fehlende Teile in der bereitzustellen relative URL.
Als Beispiel:
>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', 'FAQ.html')
Ausgang:
'http://www.cwi.nl:50/%7Eguido/FAQ.html'
Das Argument allowFrag
hat die gleiche Bedeutung und Vorgabe wie bei urlparse()
. Wenn newurl
eine absolute URL ist, die mit //
oder scheme://
beginnt, werden der hostname
und/oder das schema
von newurl
in der Ausgabe vorhanden sein. Als Beispiel:
>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', '//www.python.org/%7Eguido')
Ausgang:
'http://www.python.org/%7Eguido'
Falls dies nicht die ausgenommene Ausgabe ist, verarbeiten Sie die newurl
mit urlsplit()
und urlunsplit()
vor und trennen Sie mögliche Schema- und Netzwerkstandortteile.
Wenn Sie sich Gedanken über die Funktionen machen, werden die Funktionalitäten von urlparse()
, urlsplit()
und urlunsplit()
im Folgenden kurz beschrieben:
urlparse()
– Dieses Modul ermöglicht es dem Benutzer, URLs schnell in verschiedene Teile zu trennen und bestimmte Teile aus URLs herauszufiltern.urlsplit()
- Dieses Modul ist eine Alternative zuurlparse()
, unterscheidet sich jedoch dadurch, dass es die Parameter nicht von der URL trennt. Das Modulurlsplit()
ist hilfreich für URLs nachRFC 2396
, das Parameter für jedes Pfadsegment unterstützt.urlunsplit()
- Die Funktion dieses Moduls besteht darin, die vonurlsplit()
zurückgegebenen Elemente eines Tupels zu einer vollständigen URL als String zusammenzufügen.
Verwenden Sie das Modul urljoin()
, um URLs zu erstellen
Das Modul requests
in Python kann beim Erstellen von URLs und beim dynamischen Manipulieren des URL-Werts helfen. Programmgesteuert kann jedes Unterverzeichnis der URL abgerufen werden und dann können einige Teile der URL durch die neuen Werte ersetzt werden, um neue URLs zu erstellen.
Der folgende Code-Fence verwendet urljoin()
, um verschiedene Unterordner in einem URL-Pfad abzurufen. Das urljoin()
wird verwendet, um der Basis-URL neue Werte hinzuzufügen, die eine URL erstellen.
from requests.compat import urljoin
base = "https://stackoverflow.com/questions/10893374"
print(urljoin(base, "."))
print(urljoin(base, ".."))
print(urljoin(base, "..."))
print(urljoin(base, "/10893374/"))
url_query = urljoin(base, "?vers=1.0")
print(url_query)
url_sec = urljoin(url_query, "#section-5.4")
print(url_sec)
Ausgang:
https://stackoverflow.com/questions/
https://stackoverflow.com/
https://stackoverflow.com/questions/...
https://stackoverflow.com/10893374/
https://stackoverflow.com/questions/10893374?vers=1.0
https://stackoverflow.com/questions/10893374?vers=1.0#section-5.4
Gibt es eine Möglichkeit, URLs in Python aufzuteilen? Natürlich ja!
Wir können die URLs über die primäre Adresse hinaus in viele Komponenten aufteilen. Die zusätzlichen Parameter, die für eine bestimmte Abfrage oder an die URL angehängte Tags verwendet werden, werden mit der Methode urlphase()
aufgeteilt, wie unten gezeigt.
from requests.compat import urlparse
url_01 = (
"https://docs.python.org/3/library/__main__.html?highlight=python%20hello%20world"
)
url_02 = "https://docs.python.org/2/py-modindex.html#cap-f"
print(urlparse(url_01))
print(urlparse(url_02))
Ausgang:
ParseResult(scheme='https', netloc='docs.python.org', path='/3/library/__main__.html', params='', query='highlight=python%20hello%20world', fragment='')
ParseResult(scheme='https', netloc='docs.python.org', path='/2/py-modindex.html', params='', query='', fragment='cap-f')
Verwenden Sie urljoin()
, um URLs zu bilden
Die Bildung von URLs aus verschiedenen Teilen zum Verständnis des Verhaltens der aus urllib.parse importierten Methode urljoin() wird in den folgenden Beispielen gezeigt und erläutert.
Beispielcode:
>>> from urllib.parse import urljoin
>>> urljoin('test', 'task')
Ausgang:
'task'
Beispielcode:
>>> from urllib.parse import urljoin
>>> urljoin('http://test', 'task')
Ausgang:
'http://test/task'
Beispielcode:
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add', 'task')
Ausgang:
'http://test/task'
Beispielcode:
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', 'task')
Ausgang:
'http://test/add/task'
Beispielcode:
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', '/task')
Ausgang:
'http://test/task'
Beispielcode:
>>> from urllib.parse import urljoin
>>> urljoin('test', 'task')
Ausgang:
'task'
Im obigen Snippet kann das erste Argument als die baseurl
betrachtet werden (unter Annahme der Syntax von urljoin()
), die der im Browser angezeigten Seite entsprechen kann.
Das zweite Argument, newurl
, kann als href
eines Ankers auf dieser Seite betrachtet werden. Als Ergebnis leitet die endgültige URL zu einer Seite, auf die der Benutzer einmal geklickt hat.
Eine Person kann auch in Betracht ziehen, dass die baseurl
ein Schema und eine Domain enthält, wenn sie das obige Snippet betrachtet.
Beispielcode:
>>> from urllib.parse import urljoin
>>> urljoin('http://test', 'task')
Ausgang:
'http://test/task'
Der Link kann den Benutzer zur URL im obigen Snippet leiten, wenn der Aspekt des virtuellen Hostings und ein Anker wie <a href='task'>Baz</a>
berücksichtigt werden.
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add', 'task')
Ausgang:
'http://test/task'
Durch Hinzufügen eines weiteren Teils, test/add
, wie oben, wird ein relativer Link zu task
erstellt, der den Benutzer zur obigen URL leitet.
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', 'task')
Ausgang:
'http://test/add/task'
Hier wird test/add/
hinzugefügt, das zu einem anderen relativen Link führt: test/add/task
.
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', '/task')
Ausgang:
'http://test/task'
Wenn der Benutzer auf test/add/
und das href
auf /task
ist, wird der Benutzer auf test/task
verlinkt. Wir können also sagen, dass urljoin()
in Python eine praktische Funktion ist, die bei Bedarf bei der Ermittlung von URLs hilft.
Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.