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:
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)