2013-04-03 29 views
27

Tôi cần phải tìm một thư viện để xây dựng URL trong python như:Library để tạo URL bằng Python

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

bạn muốn giới thiệu thư viện gì để sử dụng và tại sao? Có lựa chọn "tốt nhất" cho loại thư viện này không?

+3

Yêu cầu (http://docs.python-requests.org/en/latest/) thường được khuyến nghị nhưng không phải là mô-đun tích hợp. – Moshe

+0

Đó là ok, tôi yêu cầu bất kỳ thư viện nào, cho dù nó có được tích hợp hay không. Cảm ơn bạn! –

Trả lời

18

urlparse trong thư viện chuẩn python là tất cả về xây dựng các url hợp lệ. Kiểm tra tài liệu về urlparse

+6

đặc biệt [urlunparse] (https://docs.python.org/2/library/urlparse.html#urlparse.urlunparse) hoặc không được phép tạo url url –

+5

urlparse đã được chuyển đến urllib.parse kể từ python 3: https://docs.python.org/3.5/library/urllib.parse.html?highlight=urlparse –

22

Tôi sẽ truy cập vào urllib của Python, đây là thư viện được tích hợp sẵn.

# 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)) 

Output:

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

urllib.urlencode (getVars) – lasote

+0

không nối chuỗi bằng '+' trong python. Hãy thử định dạng '" {} {} "(url, chuỗi truy vấn)' – spudfkc

+0

Tôi đồng ý, nhưng đó là một giao dịch. Trong trường hợp này, tôi thấy không có gì sai khi sử dụng + cho phép nối, và vì Python 2 thậm chí không có một hình phạt tốc độ khi sử dụng +. Tuy nhiên nếu bạn muốn tuân thủ đầy đủ các tiêu chuẩn PEP8 - và thông qua đó có được khả năng tương thích chéo/ổn định, tốt hơn của bạn bằng cách sử dụng định dạng(), nối() và tham gia(). – chjortlund

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

in: http://fireoff/getdata?key1=value1&key2=value2

+2

Liệu nó cũng đưa ra yêu cầu web như là một tác dụng phụ? –

+0

@TylerLong [Có] (http://docs.python-requests.org/en/latest/api/#main-interface). –

+27

Điều này cũng giống như việc trả lời "làm thế nào để nướng bánh?" với "mở một tiệm bánh, đi bộ bên trong và yêu cầu một chiếc bánh" – 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

Dưới đây là một ví dụ của việc sử dụng urlparse để tạo URL. Điều này mang lại sự tiện lợi khi thêm đường dẫn đến URL mà không phải lo lắng về việc kiểm tra dấu gạch chéo.

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 
Các vấn đề liên quan