web-dev-qa-db-de.com

Wie kann ich in Python mit urllib feststellen, ob eine Website den Wert 404 oder 200 hat?

Wie bekomme ich den Code der Header über urllib?

112
TIMEX

Die Methode getcode () (hinzugefügt in python2.6) gibt den HTTP-Statuscode zurück, der mit der Antwort gesendet wurde, oder None, wenn die URL keine HTTP-URL ist.

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

Sie können auch rllib2 verwenden:

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

Beachten Sie, dass HTTPError eine Unterklasse von URLError ist, die den HTTP-Statuscode speichert.

85
Joe Holloway

Für 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')
28
XavierCLL
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
6
mrme