2010-10-28 3 views
7

J'ai une liste d'URL (1000+) qui ont été stockés depuis plus d'un an maintenant. Je veux les parcourir et les vérifier tous pour voir s'ils existent toujours. Quel est le meilleur moyen de les vérifier tous et de renvoyer une liste de ceux qui ne renvoient pas un site?Python vérifier l'URL va à une page

Répondre

10

c'est un peu lent, mais vous pouvez utiliser quelque chose comme ceci pour vérifier si l'URL est un live

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 

plus rapide que urllib2 vous pouvez utiliser httplib

import httplib 

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

vous pouvez également faire Checkout DNS (il n'est pas très pratique de vérifier si un site web n'existe pas):

import socket 

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

est d'utiliser la prise plus rapidement que urllib2. J'ai essayé urllib2 mais il a fallu une éternité pour que je l'arrête – John

+0

Je viens d'éditer ma question, et j'ai ajouté une solution plus rapide en utilisant httplib, et pour utiliser ping (l'autre réponse) ou dns lookup (la troisième solution dans ma réponse) n'est pas très pratique, car de nombreux sites web sont encore enregistrés dans le DNS et ils n'existent plus et pour le ping il ressemble à la recherche DNS + un ping ICMP qui ne dit pas non plus si le site web (serveur http) est en cours d'exécution "acceptant la connexion" ou pas – mouad

+0

Le 'urllib2' travaillé pour moi derrière un proxy sur OS X.' httplib' ne fonctionnerait pas. –

0

Chec k ceci:

Ping in python

End puis:

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

J'ai plus de 1000 urls à vérifier. Est-ce que ce sera plus rapide que d'utiliser la réponse urllib2 ci-dessous? – John

+0

Je pense que ce sera le cas. Essaye-le. Cela dépend aussi du réseau. Dans tous les cas, le serveur mettra un certain temps à répondre (vous pouvez définir un délai dans ma solution, comme vous pouvez le voir dans le code). – Klark

Questions connexes