¿Cómo construir URL en Python con la biblioteca estándar? [closed]

5 minutos de lectura

Avatar de usuario de Sergio Ayestarán
Sergio Ayestarán

Necesito saber cómo construir URL en python como:

http://subdomain.domain.com?arg1=someargument&arg2=someotherargument

En la biblioteca estándar de python, ¿cómo crearía una URL?

  • Peticiones (docs.python-requests.org/en/latest) generalmente se recomienda, pero no es un módulo integrado.

    – Moshé

    03/04/2013 a las 22:58


  • Está bien, estoy pidiendo cualquier biblioteca, sin importar si está integrada o no. ¡Gracias!

    – Sergio Ayestarán

    03/04/2013 a las 23:14

  • ParseResult(scheme='https', netloc='example.com', path='path', params='', query='', fragment='').geturl()

    – Guettli

    7 de julio de 2021 a las 8:56

avatar de usuario de chjortlund
chjortlund

Yo iría por Python urllibes una biblioteca integrada.

Pitón 2

import urllib
url="https://example.com/somepage/?"
params = {'var1': 'some data', 'var2': 1337}
print(url + urllib.urlencode(params))

Pitón 3

import urllib.parse
url="https://example.com/somepage/?"
params = {'var1': 'some data', 'var2': 1337}
print(url + urllib.parse.urlencode(params))

Producción:

https://example.com/somepage/?var1=some+data&var2=1337

  • urllib.urlencode(getVars)

    – lasote

    9 de abril de 2015 a las 7:58

  • no concatenar cadenas con + en pitón Intentar "{}{}".format(url, querystring)

    – spudfkc

    21 de enero de 2016 a las 17:22


  • Estoy un poco de acuerdo, pero es una compensación. En este caso, no veo nada de malo en usar + para la concatenación, y desde Python 2 ni siquiera hay una penalización de velocidad por usar +. Sin embargo, si desea cumplir completamente con el estándar PEP8 y, a través de eso, obtener compatibilidad/estabilidad cruzada, es mejor que use format(), append() y join().

    – chjortlund

    26 de enero de 2016 a las 10:06

  • @chjortlund … ¿podemos convertir la salida del marco de datos a URL? mostrar la salida de la tabla del marco de datos en forma de url: ¿cualquiera puede acceder a ella?

    – Ravi

    31 oct 2020 a las 18:46

  • @Ravi ¿Qué quiso decir con “salida de Dataframe para que cualquiera pueda acceder a él”?

    – Jean-François T.

    29 de agosto de 2022 a las 2:40

Avatar de usuario de Senthil Kumaran
Senthil Kumaran

urlparse en la biblioteca estándar de python se trata de construir direcciones URL válidas. Consulte la documentación de urlparse

Ejemplo:

from collections import namedtuple
from urllib.parse import urljoin, urlencode, urlparse, urlunparse

# namedtuple to match the internal signature of urlunparse
Components = namedtuple(
    typename="Components", 
    field_names=['scheme', 'netloc', 'url', 'path', 'query', 'fragment']
)

query_params = {
    'param1': 'some data', 
    'param2': 42
}

url = urlunparse(
    Components(
        scheme="https",
        netloc="example.com",
        query=urlencode(query_params),
        path="",
        url="https://stackoverflow.com/",
        fragment="anchor"
    )
)

print(url)

Producción:

https://example.com/?param1=some+data&param2=42#anchor

  • específicamente urlunparse o desdividir para construir una url

    –Justin Hamade

    09/01/2015 a las 18:45


  • urlparse se ha movido a urllib.parse desde python 3: docs.python.org/3.5/library/…

    – Adrián Forsio

    16/10/2015 a las 11:49

  • P.ej urllib.parse.urlunparse(('http', 'example.com', '/path', None, 'a=1', 'fragment')).

    – x-yuri

    1 de julio de 2018 a las 9:07

  • Esta biblioteca solo le brinda los componentes más primitivos para construir una URL válida; tienes que entender cómo ensamblar esos componentes. Por ejemplo, urlunparse toma un “netloc” que es el “nombre de usuario:contraseña@host:puerto”, y usted está pendiente de la codificación URL de la contraseña y la cadena interpolándola en la cadena “netloc” (de lo contrario, las contraseñas que contienen los caracteres especiales romperán su programa). Del mismo modo, debe convertir su dictado de consulta en una cadena, teniendo cuidado de codificar la URL de manera adecuada. Si está buscando una biblioteca sensata para crear URL válidas, no es esta.

    – weberc2

    3 mayo 2019 a las 16:42


  • @Senthil Kumaran, ¿podemos convertir la salida del marco de datos a URL? mostrar la salida de la tabla del marco de datos en forma de url: ¿cualquiera puede acceder a ella?

    – Ravi

    31 oct 2020 a las 18:46

Avatar de usuario de Michael Jaison G
Michael Jason G.

Aquí hay un ejemplo de uso urlparse para generar URL. Esto brinda la conveniencia de agregar una ruta a la URL sin preocuparse por revisar las barras.

import urllib

def build_url(base_url, path, args_dict):
    # Returns a list in the structure of urlparse.ParseResult
    url_parts = list(urllib.parse.urlparse(base_url))
    url_parts[2] = path
    url_parts[4] = urllib.parse.urlencode(args_dict)
    return urllib.parse.urlunparse(url_parts)

>>> args = {'arg1': 'value1', 'arg2': 'value2'}
>>> # works with double slash scenario
>>> build_url('http://www.example.com/', '/somepage/index.html', args)

http://www.example.com/somepage/index.html?arg1=value1&arg2=value2

# works without slash
>>> build_url('http://www.example.com', 'somepage/index.html', args)

http://www.example.com/somepage/index.html?arg1=value1&arg2=value2

  • He estado usando una biblioteca llamada yarl y funciona muy bien con URL. Es muy pythonic y admite operadores. / para unir caminos como pathlib.

    – Michael Jason G.

    17 de noviembre de 2020 a las 19:44

Avatar de usuario de Mike K
mike k

import urllib

def make_url(base_url , *res, **params):
    url = base_url
    for r in res:
        url="{}/{}".format(url, r)
    if params:
        url="{}?{}".format(url, urllib.urlencode(params))
    return url

print make_url('http://example.com', 'user', 'ivan', alcoholic="true", age=18)

Producción:

http://example.com/user/ivan?age=18&alcoholic=true

¿Ha sido útil esta solución?