Introducción a Urljoin en Python
Este tutorial describe Python urljoin
y su comportamiento al usarlo. También demuestra el uso de urljoin
en Python usando diferentes códigos de ejemplo.
Introducción a urljoin
en Python
Las URL generalmente incluyen información esencial que podría utilizarse al evaluar un sitio web, la búsqueda de un participante o la disposición del material en cada área.
A veces, si las URL parecen bastante complejas, Python viene con varias bibliotecas valiosas que permiten analizar, unir URL y recuperar las partes constituyentes de las URL.
El paquete urllib
en Python 3 permite a los usuarios explorar sitios web desde su script y contiene varios módulos para administrar funciones de URL como urljoin()
.
La biblioteca urllib
es crucial cuando se usa una URL en la programación de Python que permite a los usuarios visitar e interactuar con sitios web usando su Localizador Universal de Recursos.
Además, esta biblioteca proporciona más paquetes como urllib.request
, urllib.error
, urllib.parse
y urllib.robotparser
.
Uso del Método urljoin()
El método urljoin()
es útil cuando se necesitan muchas URL relacionadas. Por ejemplo, se generarán URL para un conjunto de páginas para un sitio web y se agregarán nuevos valores a la URL base.
Sintaxis:
urljoin(baseurl, newurl, allowFrag=None)
Después de construir una URL completa combinando una URL base(baseurl
) con otra URL(nuevaurl
), informalmente, esto usa partes de la URL base como el esquema de direccionamiento, la ubicación de la red y la ruta para proporcionar las partes que faltan en el URL relativa.
Como ejemplo:
>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', 'FAQ.html')
Producción :
'http://www.cwi.nl:50/%7Eguido/FAQ.html'
El argumento allowFrag
tiene el mismo significado y valor predeterminado que urlparse()
. Si newurl
es una URL absoluta que comienza con //
o scheme://
, el hostname
y/o scheme
de newurl
estarán presentes en la salida. Como ejemplo:
>>> from urllib.parse import urljoin
>>> urljoin('http://www.cwi.nl:50/%7Eguido/Python.html', '//www.python.org/%7Eguido')
Producción :
'https://www.python.org/%7Eguido'
En caso de que esta no sea la salida exceptuada, preprocesar la nueva URL
con urlsplit()
y urlunsplit()
, separando las posibles partes del esquema y la ubicación de la red.
Si le preocupan las funciones, las funcionalidades de urlparse()
, urlsplit()
y urlunsplit()
se describen brevemente a continuación:
urlparse()
: este módulo permite al usuario separar rápidamente las URL en diferentes partes y filtrar cualquier parte particular de las URL.urlsplit()
- Este módulo es una alternativa aurlparse()
pero diferente ya que no separa los parámetros de la URL. El módulourlsplit()
es útil para las URL que siguenRFC 2396
, que admite parámetros para cada segmento de ruta.urlunsplit()
- La función de este módulo es combinar los elementos de una tupla devuelta porurlsplit()
para formar una URL completa como una cadena.
Utilice el módulo urljoin()
para crear URL
El módulo de solicitudes
en Python puede ayudar a crear URL y manipular el valor de URL dinámicamente. Mediante programación, se puede obtener cualquier subdirectorio de la URL y luego se pueden sustituir algunas partes de la URL con los nuevos valores para crear nuevas URL.
La siguiente cerca de código usa urljoin()
para obtener diferentes subcarpetas en una ruta de URL. El urljoin()
se usa para agregar nuevos valores a la URL base que construirá una URL.
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)
Producción :
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
¿Hay alguna forma de dividir las URL en Python? ¡Por supuesto que sí!
Podemos dividir las URL en muchos componentes más allá de la dirección principal. Los parámetros adicionales utilizados para una consulta en particular o las etiquetas adjuntas a la URL se dividen mediante el método urlphase()
, como se muestra a continuación.
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))
Producción :
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')
Use urljoin()
para formar URL
La formación de direcciones URL de diferentes partes para comprender el comportamiento del método urljoin() importado de urllib.parse se muestra y explica en los siguientes ejemplos.
Código de ejemplo:
>>> from urllib.parse import urljoin
>>> urljoin('test', 'task')
Producción :
'task'
Código de ejemplo:
>>> from urllib.parse import urljoin
>>> urljoin('http://test', 'task')
Producción :
'http://test/task'
Código de ejemplo:
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add', 'task')
Producción :
'http://test/task'
Código de ejemplo:
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', 'task')
Producción :
'http://test/add/task'
Código de ejemplo:
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', '/task')
Producción :
'http://test/task'
Código de ejemplo:
>>> from urllib.parse import urljoin
>>> urljoin('test', 'task')
Producción :
'task'
En el fragmento anterior, el primer argumento puede considerarse como baseurl
(asumiendo la sintaxis de urljoin()
) que puede ser igual a la página que se muestra en el navegador.
El segundo argumento, newurl
, puede considerarse como el href
de un ancla en esa página. Como resultado, la URL final dirige a una página una vez que el usuario hace clic.
Una persona también puede considerar que baseurl
incluye un esquema y un dominio al considerar el fragmento anterior.
Código de ejemplo:
>>> from urllib.parse import urljoin
>>> urljoin('http://test', 'task')
Producción :
'http://test/task'
El enlace puede dirigir al usuario a la URL en el fragmento anterior si se considera el aspecto del alojamiento virtual y un ancla como <a href='task'>Baz</a>
.
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add', 'task')
Producción :
'http://test/task'
Agregar otra parte, probar/agregar
como se indicó anteriormente, creará un enlace relativo a la tarea
que dirigirá al usuario a la URL anterior.
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', 'task')
Producción :
'http://test/add/task'
Aquí se añade test/add/
que dirigirá a otro enlace relativo: test/add/task
.
>>> from urllib.parse import urljoin
>>> urljoin('http://test/add/', '/task')
Producción :
'http://test/task'
Si el usuario está en prueba/añadir/
y href
está en /tarea
, vinculará al usuario a prueba/tarea
. Entonces, podemos decir que urljoin()
en Python es una función útil que ayudará a resolver las URL según sea necesario.
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.