En Python, ¿cómo uso urllib para ver si un sitio web es 404 o 200?


Respuestas:


176

El método getcode () (agregado en python2.6) devuelve el código de estado HTTP que se envió con la respuesta, o None si la URL no es una URL HTTP.

>>> a=urllib.urlopen('http://www.google.com/asdfsf')
>>> a.getcode()
404
>>> a=urllib.urlopen('http://www.google.com/')
>>> a.getcode()
200

Para usar en Python 3, simplemente use from urllib.request import urlopen.
Nathanael Farley

4
En Python 3.4, si hay un 404, urllib.request.urlopendevuelve un urllib.error.HTTPError.
mcb

No funciona en Python 2.7. Si HTTP devuelve 400, se lanza una excepción
Nadav B

86

También puede usar urllib2 :

import urllib2

req = urllib2.Request('http://www.python.org/fish.html')
try:
    resp = urllib2.urlopen(req)
except urllib2.HTTPError as e:
    if e.code == 404:
        # do something...
    else:
        # ...
except urllib2.URLError as e:
    # Not an HTTP-specific error (e.g. connection refused)
    # ...
else:
    # 200
    body = resp.read()

Tenga en cuenta que HTTPErrores una subclase de la URLErrorque almacena el código de estado HTTP.


¿El segundo es elseun error?
Samy Bencherif

@NadavB El objeto de excepción 'e' se verá como un objeto de respuesta. Es decir, es similar a un archivo y puede "leer" la carga útil de él.
Joe Holloway

37

Para Python 3:

import urllib.request, urllib.error

url = 'http://www.google.com/asdfsf'
try:
    conn = urllib.request.urlopen(url)
except urllib.error.HTTPError as e:
    # Return code error (e.g. 404, 501, ...)
    # ...
    print('HTTPError: {}'.format(e.code))
except urllib.error.URLError as e:
    # Not an HTTP-specific error (e.g. connection refused)
    # ...
    print('URLError: {}'.format(e.reason))
else:
    # 200
    # ...
    print('good')

Para URLError print(e.reason) podría usarse.
Gitnik

¿Qué hay de http.client.HTTPException?
CMCDragonkai

6
import urllib2

try:
    fileHandle = urllib2.urlopen('http://www.python.org/fish.html')
    data = fileHandle.read()
    fileHandle.close()
except urllib2.URLError, e:
    print 'you got an error with the code', e

5
TIMEX está interesado en tomar el código de solicitud http (200, 404, 500, etc.), no un error genérico arrojado por urllib2.
Joshua Burns
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.