95 votes

Comment construire des URL en Python

J'ai besoin de savoir comment construire des URL en python, par exemple :

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

Quelle bibliothèque recommanderiez-vous d'utiliser et pourquoi ? Existe-t-il un "meilleur" choix pour ce type de bibliothèque ?

Par ailleurs, pouvez-vous me fournir un exemple de code pour commencer à utiliser la bibliothèque ?

85voto

Hjortlund Points 125

J'opterais pour les Python urllib il s'agit d'une bibliothèque intégrée.

Python 2

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

Python 3

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

Sortie :

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

46voto

Senthil Kumaran Points 14934

urlparse de la bibliothèque standard de python permet de construire des urls valides. Consultez la documentation de urlparse

23voto

Michael Jaison G Points 286

Voici un exemple d'utilisation de urlparse pour générer des URL. Cela permet d'ajouter le chemin d'accès à l'URL sans se soucier de la vérification des barres obliques.

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

11voto

Mike K Points 311
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)

Sortie :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X