2013-04-03 2 views
27

Мне нужно найти библиотеку для создания URL-адреса в Python, как:библиотека для создания URL-адреса в Python

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

Что библиотеке вы рекомендовали бы использовать и почему? Есть ли «лучший» выбор для такого рода библиотеки?

+3

Запросы (http://docs.python-requests.org/en/latest/) обычно рекомендуются, но это не встроенный модуль. – Moshe

+0

Это нормально, я прошу любую библиотеку, независимо от того, встроена она или нет. Спасибо! –

ответ

18

urlparse в стандартной библиотеке python - это создание правильных URL-адресов. Проверьте документацию urlparse

+6

специфически [urlunparse] (https://docs.python.org/2/library/urlparse.html#urlparse.urlunparse) или нерасщепленный для создания URL-адреса –

+5

urlparse был перемещен в urllib.parse с python 3: https://docs.python.org/3.5/library/urllib.parse.html?highlight=urlparse –

22

Я бы выбрал Python's urllib, это встроенная библиотека.

# Python 2: 
import urllib 

# Python 3: 
# import urllib.parse 

getVars = {'var1': 'some_data', 'var2': 1337} 
url = 'http://domain.com/somepage/?' 

# Python 2: 
print(url + urllib.urlencode(getVars)) 

# Python 3: 
# print(url + urllib.parse.urlencode(getVars)) 

Выход:

http://domain.com/somepage/?var2=1337&var1=some_data 
+3

urllib.urlencode (getVars) – lasote

+0

не объединяйте строки с '+' в python. Попробуйте '' {} {} ". Format (url, querystring)' – spudfkc

+0

Я вроде согласен, но это компромисс. В этом случае я не вижу ничего плохого в использовании + для конкатенации, и поскольку Python 2 не имеет даже штрафа за скорость использования +. Однако, если вы хотите полностью соответствовать стандарту PEP8, и благодаря этому вы получите перекрестную совместимость/стабильность, вам лучше использовать format(), append() и join(). – chjortlund

4
import requests 
payload = {'key1':'value1', 'key2':'value2'} 
response = request.get('http://fireoff/getdata', params=payload) 
print response.url 

печатает: http://fireoff/getdata?key1=value1&key2=value2

+2

Он также выдает веб-запрос как побочный эффект? –

+0

@TylerLong [Да, это так] (http://docs.python-requests.org/en/latest/api/#main-interface). –

+27

Это сродни тому, как отвечать «как испечь торт?» с «открыть пекарню, пройти внутрь и попросить пирог» – Ian

4
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', aloholic='true', age=18) 

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

Ниже приведен пример использования urlparse для генерации URL. Это обеспечивает удобство добавления пути к URL-адресу, не беспокоясь о проверке косой черты.

import urllib 
import urlparse 

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

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

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

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

>>> http://www.example.com/somepage/index.html?arg1=value1&arg2=value2 
Смежные вопросы