2009-08-19 34 views
9

Tôi đang đấu tranh để chuyển đổi một url thành một tuple lồng nhau.Làm cách nào để chuyển đổi chuỗi truy vấn URL thành danh sách các bộ dữ liệu bằng Python?

# Convert this string 
str = 'http://somesite.com/?foo=bar&key=val' 

# to a tuple like this: 
[(u'foo', u'bar'), (u'key', u'val')] 

Tôi giả sử tôi cần phải làm một cái gì đó như:

url = 'http://somesite.com/?foo=bar&key=val' 
url = url.split('?') 
get =() 
for param in url[1].split('&'): 
    get = get + param.split('=') 

Tôi đang làm gì sai? Cảm ơn!

Trả lời

28

Tôi tin rằng bạn đang tìm kiếm mô-đun urlparse.

Module này định nghĩa một giao diện tiêu chuẩn để phá vỡ Uniform Resource Locator (URL) dây trong thành phần (lược đồ địa chỉ, vị trí mạng, đường vv), để kết hợp các thành phần lại thành một chuỗi URL , và để chuyển đổi một “URL có liên quan” đến một URL tuyệt đối cho một

Dưới đây là một ví dụ “URL cơ sở.”:

from urlparse import urlparse, parse_qsl 

url = 'http://somesite.com/?foo=bar&key=val' 
print parse_qsl(urlparse(url)[4]) 

Output:

[('foo', 'bar'), ('key', 'val')] 

Trong ví dụ này tôi lần đầu tiên sử dụng urlparse chức năng để phân tích toàn bộ URL sau đó tôi sử dụng parse_qsl chức năng để phá vỡ chuỗi truy vấn (các yếu tố thứ năm trở về từ urlparse) vào một danh sách của bộ dữ liệu.

+0

Thật tuyệt vời. Cảm ơn! – orwellian

0

Câu trả lời của Andrew thực sự mang tính thông tin và hữu ích. Một cách ít tinh thông để lấy những params sẽ có một biểu hiện thường xuyên - một cái gì đó như thế này:

nhập tái

re_param = re.compile(r'(?P<key>w\+)=(?P<value>w\+)') 

url = 'http://somesite.com/?foo=bar&key=val'' 
params_list = re_param.findall(url) 

Ngoài ra, trong mã của bạn có vẻ như bạn đang cố gắng để nối một danh sách và tuple--

for param in url[1].split('&'): 
    get = get + param.split('=') 

Bạn đã tạo một tuple, nhưng str.split trả về một danh sách. Có thể điều này sẽ sửa mã của bạn:

for param in url[1].split('&'): 
    get = get + tuple(param.split('=')) 
+2

Tôi đã đăng bài này một thời gian dài trước đây .... xứng đáng với các downvote. – twneale

Các vấn đề liên quan