2011-11-22 36 views
55

Tôi đã hai url:Làm cách nào để tham gia các url tuyệt đối và tương đối?

url1 = "http://127.0.0.1/test1/test2/test3/test5.xml" 
url2 = "../../test4/test6.xml" 

Làm thế nào tôi có thể nhận được một địa chỉ tuyệt đối cho url2?

+0

thể trùng lặp của [Làm thế nào để tham gia thành phần của một con đường khi bạn đang xây dựng một URL trong Python] (http://stackoverflow.com/questions/1793261/how-to-join-components-of-a -khi-bạn-đang-xây dựng-một-url-trong-python) –

+0

Liên quan: [Tham gia các thành phần đường dẫn url một cách thông minh] (http://codereview.stackexchange.com/questions/13027/joining-url-path- thành phần thông minh) – kojiro

Trả lời

120

Bạn nên sử dụng urlparse.urljoin:

>>> import urlparse 
>>> urlparse.urljoin(url1, url2) 
'http://127.0.0.1/test1/test4/test6.xml' 

Với Python 3 (nơi urlparse is renamed to urllib.parse), bạn có thể use it as follow:

>>> import urllib.parse 
>>> urllib.parse.urljoin(url1, url2) 
'http://127.0.0.1/test1/test4/test6.xml' 
+0

Cách chúng tôi sử dụng 'urljoin' với 3 hoặc tham số chế độ hoặc thư viện nào bạn đề xuất cho việc này? –

+0

@mesuutt cố gắng tạo vòng lặp và tham gia từng phần với URL đã tham gia trước đây. –

+1

@ CédricJulien: một vòng lặp đơn giản sẽ không hoạt động, vì bất kỳ đường dẫn nào có '/' sẽ "đặt lại" và trả về lược đồ + netloc + lasturl: 'urlparse.urljoin ('http://www.a.com/b/ c/d ','/e ') =>' http: // www.a.com/e'' – MestreLion

4
>>> from urlparse import urljoin 
>>> url1 = "http://www.youtube.com/user/khanacademy" 
>>> url2 = "/user/khanacademy" 
>>> urljoin(url1, url2) 
'http://www.youtube.com/user/khanacademy' 

đơn giản.

7
es = ['http://127.0.0.1', 'test1', 'test4', 'test6.xml'] 
base = '' 
map(lambda e: urlparse.urljoin(base, e), es) 
Các vấn đề liên quan