from - Python comprueba si existe sitio web
urllib.urlencode python 3 (6)
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)
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 page = ...
para asegurarme de que la página que estoy leyendo salga?
Es mejor verificar que el código de estado sea <400, como se hizo here . 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 requests :
import requests
response = requests.get(''http://google.com'')
assert response.status_code < 400
Ver también temas similares:
- here
- 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.
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'')
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
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. Source