2014-02-10 51 views
3

我正在使用一個應用程序返回用Flask編寫的url。我希望顯示給用戶的URL儘可能乾淨,所以我想從中刪除http://。我查看並找到了urlparse庫,但找不到如何執行此操作的任何示例。什麼是最好的方式去做,如果urlparse是矯枉過正有更簡單的方法嗎?只需使用常規字符串解析工具從URL中刪除「http://」子字符串就是不好的做法或導致問題?如何從Python中的url中刪除方案?

回答

5

我不認爲urlparse爲此提供了一種方法或功能。這是我想做到這一點:

from urlparse import urlparse 

url = 'HtTp://stackoverflow.com/questions/tagged/python?page=2' 

def strip_scheme(url): 
    parsed = urlparse(url) 
    scheme = "%s://" % parsed.scheme 
    return parsed.geturl().replace(scheme, '', 1) 

print strip_scheme(url) 

輸出:

stackoverflow.com/questions/tagged/python?page=2 

如果你會使用(只)簡單的字符串解析,你必須處理http[s],以及其他可能的方案你自己。此外,這處理該方案的怪異外殼。

0

如果你使用這些以編程方式而不是使用替換,我建議讓urlparse重新創建URL而不使用方案。

ParseResult對象是一個元組。所以你可以創建另一個刪除你不想要的字段。

# py2/3 compatibility 
try: 
    from urllib.parse import urlparse, ParseResult 
except ImportError: 
    from urlparse import urlparse, ParseResult 


def strip_scheme(url): 
    parsed_result = urlparse(url) 
    return ParseResult('', *parsed_result[1:]).geturl() 

您可以通過簡單地用空字符串替換輸入來刪除parsedresult的任何組件。

重要的是要注意這個答案和@Lukas Graf的答案之間存在功能差異。最有可能的功能差異是url的'//'組件在技術上並不是該方案,所以這個答案將會保留它,而它將保留在這裏。

>>> Lukas_strip_scheme('https://yoman/hi?whatup') 
'yoman/hi?whatup' 
>>> strip_scheme('https://yoman/hi?whatup') 
'//yoman/hi?whatup'