2010-10-28 50 views
7

我有一個已經存儲了一年多的url(1000+)列表。我想貫穿全部,並驗證它們是否仍然存在。什麼是最好的/最快捷的方式來檢查它們並返回不返回網站的列表?Python驗證url轉到頁面

回答

10

這是一種緩慢的,但你可以使用這樣的檢查,如果網址是現場

import urllib2 

try: 
    urllib2.urlopen(url) 
    return True   # URL Exist 
except ValueError, ex: 
    return False  # URL not well formatted 
except urllib2.URLError, ex: 
    return False  # URL don't seem to be alive 

以上的urllib2可以使用httplib

import httplib 

try: 
    a = httplib.HTTPConnection('google.com') 
    a.connect() 
except httplib.HTTPException as ex: 
    print "not connected" 

你也可以做一個快速DNS結帳(檢查網站是否存在並不方便):

import socket 

try: 
    socket.gethostbyname('www.google.com') 
except socket.gaierror as ex: 
    print "not existe" 
+0

使用插座比的urllib2更快。我嘗試urllib2,但它花了很長時間,所以我最終停止了它 – John 2010-10-28 15:31:42

+0

我剛剛編輯我的問題,我添加了一個更快的解決方案使用httplib,並使用ping(其他答案)或dns查找(我的答案中的第三個解決方案)不是很方便,因爲許多網站仍然在DNS中註冊,並且它們不再存在,並且對於ping而言,它就像DNS查找+ ICMP ping,如果網站(http服務器)是運行「接受連接」還是不行 – mouad 2010-10-28 17:07:13

+0

從OS X上的代理後面運行'urllib2','httplib'不起作用。 – 2016-06-06 22:45:50

0

Chec ķ此:

Ping in python

結束,則:

import ping, socket 
try: 
    result = ping.do_one('http://stackoverflow.com/', timeout=2) 
except socket.error, e: 
    # url cannot be reached 
    print "Error:", e 
+0

我有超過1000個網址來檢查。這會比使用下面的urllib2答案更快嗎? – John 2010-10-28 15:30:47

+0

我認爲會。測試它。這也取決於網絡。在任何情況下,服務器都需要一些時間來響應(您可以在解決方案中設置超時時間,如代碼中所示)。 – Klark 2010-10-28 15:42:40