2010-10-28 12 views
7

Şu anda bir yıldan fazla bir süredir depolanmış bir URL'ler (1000+) var. Devam etmek istiyorum ve hala var olup olmadığını görmek için hepsini doğrulamak istiyorum. Hepsini kontrol etmenin ve siteye geri dönmeyenlerin listesini döndürmenin en iyi/hızlı yolu nedir?Python doğrulama url bir sayfaya gider

cevap

10

bu tür yavaş ama url ayrıca bir yapabilirsiniz size httplib

import httplib 

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

kullanabilirsiniz urllib2 daha canlı bir

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 

daha hızlı olup olmadığını kontrol etmek böyle bir şey kullanabilirsiniz DNS çıkışı (bir web sitesinin bulunup bulunmadığını kontrol etmek pek uygun değildir):

import socket 

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

hızlı urllib2 daha soketi kullanıyor. Ben urllib2 denedim ama bu sonsuza dek sürdü bu yüzden – John

+0

durdurdu ben sadece benim soru düzenlenmiş ve httplib kullanarak ve ping (diğer cevap) veya dns araması (cevabımda üçüncü çözüm) kullanarak daha hızlı bir çözüm ekledim çok uygun değil, çünkü birçok web sitesi hala DNS'de kayıtlı ve artık yok ve ping için sadece DNS arama + bir ICMP ping gibi web sitesi (http sunucusu) olup olmadığını söyleme "bağlantı kabul ediliyor" çalışıyor ya da değil – mouad

+0

"urllib2" bir OS X üzerinde bir proxy arkasından benim için çalıştı. "httplib 'işe yaramaz. –

0

Chec Bu k: o zaman

Ping in python

Sonu:

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

Kontrol etmek için 1000'den fazla URL sahibim. Bu aşağıda urllib2 cevabı kullanmaktan daha hızlı olacak mı? – John

+0

Sanırım olacak. Dene. Ayrıca ağa da bağlıdır. Her durumda sunucunun yanıt vermesi biraz zaman alacaktır (kodda gördüğünüz gibi benim çözümümde zaman aşımı ayarlayabilirsiniz). – Klark

İlgili konular