2012-08-15 71 views
1

[是的,標題不是拼寫錯誤!]python中的URL解析器無效

在python中,我需要一些解析URL的東西。我無法相信標準尚不存在。由於該URL設置在配置中,我想確保它不是垃圾。

有urlparse.urlparse,但只有解析「有效的URL」(有一些無效的網址,有時拋出一個無證ValueError異常)

例如

>>> import urlparse 
>>> urlparse.urlparse('http://aa :: aa ! aa:11.com:aa').netloc 
'aa :: aa ! aa:11.com:aa' 

顯示了urlparse如何解析我認爲無效的URL。

+0

你就不能使用和裏urlparse趕上錯誤? – codebox 2012-08-15 10:31:22

+0

正則表達式有什麼用?我想你會發現成千上萬的網址。 – Paranaix 2012-08-15 10:32:27

回答

1

URL解析和URL驗證實際上是不同的任務。

urlparse.urlparse使解析,驗證通常使用正則表達式機器(內置re模塊在Python中)。

這裏是和例如URL驗證從Django框架:

regex = re.compile(
    r'^(?:http|ftp)s?://' # http:// or https:// 
    r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+(?:[A-Z]{2,6}\.?|[A-Z0-9-]{2,}\.?)|' #domain... 
    r'localhost|' #localhost... 
    r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip 
    r'(?::\d+)?' # optional port 
    r'(?:/?|[/?]\S+)$', re.IGNORECASE) 
+1

我曾經假定有一些標準的東西,最好是隻剪切粘貼代碼。 但是,django.core.validators.URLValidator正是我所需要的,謝謝:) – typingduck 2012-08-15 10:44:52

+0

用正則表達式寫一個廣泛的url驗證器幾乎是不可能的。很多情況下,電話或郵件:失蹤。還IPv6和更多... – 2014-04-08 11:59:56