Python verifica si existe sitio

Quería comprobar si existe un determinado sitio web, esto es lo que estoy haciendo:

user_agent = 'Mozilla/20.0.1 (compatible; MSIE 5.5; Windows NT)' headers = { 'User-Agent':user_agent } link = "http://www.abc.com" req = urllib2.Request(link, headers = headers) page = urllib2.urlopen(req).read() - ERROR 402 generated here! 

Si la página no existe (error 402, o cualquier otro error), ¿qué puedo hacer en la línea de la page = ... para asegurarme de que la página que estoy leyendo salga?

Puedes usar la solicitud HEAD en lugar de GET. Solo descargará el encabezado, pero no el contenido. A continuación, puede comprobar el estado de respuesta de los encabezados.

 import httplib c = httplib.HTTPConnection('www.example.com') c.request("HEAD", '') if c.getresponse().status == 200: print('web site exists') 

o puedes usar urllib2

 import urllib2 try: urllib2.urlopen('http://www.example.com/some_page') except urllib2.HTTPError, e: print(e.code) except urllib2.URLError, e: print(e.args) 

o puedes usar requests

 import requests request = requests.get('http://www.example.com') if request.status_code == 200: print('Web site exists') else: print('Web site does not exist') 

Es mejor verificar que el código de estado sea <400, como se hizo aquí . Esto es lo que significan los códigos de estado (tomados de wikipedia ):

  • 1xx – informativo
  • 2xx – el éxito
  • 3xx – redirección
  • 4xx – error del cliente
  • 5xx – error del servidor

Si desea verificar si existe una página y no desea descargar la página completa, debe usar la Solicitud de encabezado :

 import httplib2 h = httplib2.Http() resp = h.request("http://www.google.com", 'HEAD') assert int(resp[0]['status']) < 400 

tomado de esta respuesta .

Si desea descargar la página completa, solo realice una solicitud normal y verifique el código de estado. Ejemplo usando peticiones :

 import requests response = requests.get('http://google.com') assert response.status_code < 400 

Ver también temas similares:

  • ¿Python script para ver si existe una página web sin descargar toda la página?
  • Comprobando si un enlace está muerto o no usa Python sin descargar la página web
  • ¿Cómo se envía una solicitud HEAD HTTP en Python 2?
  • Realización de una solicitud HTTP HEAD con urllib2 desde Python 2

Espero que ayude.

 from urllib2 import Request, urlopen, HTTPError, URLError user_agent = 'Mozilla/20.0.1 (compatible; MSIE 5.5; Windows NT)' headers = { 'User-Agent':user_agent } link = "http://www.abc.com/" req = Request(link, headers = headers) try: page_open = urlopen(req) except HTTPError, e: print e.code except URLError, e: print e.reason else: print 'ok' 

Para responder al comentario de unutbu:

Debido a que los manejadores predeterminados manejan las redirecciones (códigos en el rango 300), y los códigos en el rango 100-299 indican el éxito, generalmente solo verá los códigos de error en el rango 400-599. Fuente

código:

 a="http://www.example.com" try: print urllib.urlopen(a) except: print a+" site does not exist" 
 def isok(mypath): try: thepage = urllib.request.urlopen(mypath) except HTTPError as e: return 0 except URLError as e: return 0 else: return 1 

Prueba este:

 import urllib2 website='https://www.allyourmusic.com' try: response = urllib2.urlopen(website) if response.code==200: print("site exists!") else: print("site doesn't exists!") except urllib2.HTTPError, e: print(e.code) except urllib2.URLError, e: print(e.args)