En Python, comment utiliser urllib pour voir si un site Web est 404 ou 200?


Réponses:


176

La méthode getcode () (ajoutée dans python2.6) renvoie le code d'état HTTP qui a été envoyé avec la réponse, ou None si l'URL n'est pas une URL HTTP.

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

Pour utiliser dans python 3, utilisez simplement from urllib.request import urlopen.
Nathanael Farley

4
En python 3.4, s'il y a un 404, urllib.request.urlopenretourne un urllib.error.HTTPError.
mcb

Ne fonctionne pas en python 2.7. Si le HTTP renvoie 400, une exception est levée
Nadav B

86

Vous pouvez également utiliser 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()

Notez qu'il HTTPErrors'agit d'une sous-classe de URLErrorlaquelle stocke le code d'état HTTP.


La seconde est-elle elseune erreur?
Samy Bencherif

@NadavB L'objet d'exception 'e' ressemblera à un objet de réponse. Autrement dit, il ressemble à un fichier et vous pouvez «lire» la charge utile à partir de celui-ci.
Joe Holloway

37

Pour 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')

Pour URLError print(e.reason) peut être utilisé.
Gitnik

Et quoi 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 intéressé à saisir le code de requête http (200, 404, 500, etc.) et non une erreur générique lancée par urllib2.
Joshua Burns
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.