Einführung in Urljoin in Python

Migel Hewage Nimesha 21 Juni 2023
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 zu urlparse(), unterscheidet sich jedoch dadurch, dass es die Parameter nicht von der URL trennt. Das Modul urlsplit() ist hilfreich für URLs nach RFC 2396, das Parameter für jedes Pfadsegment unterstützt.
  • urlunsplit() - Die Funktion dieses Moduls besteht darin, die von urlsplit() 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.

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

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.