Trong Python, làm cách nào để sử dụng urllib để xem một trang web là 404 hay 200?


Câu trả lời:


176

Phương thức getcode () (Đã thêm trong python2.6) trả về mã trạng thái HTTP đã được gửi cùng với phản hồi hoặc Không có nếu URL không phải là URL HTTP.

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

Để sử dụng trong python 3, chỉ cần sử dụng from urllib.request import urlopen.
Nathanael Farley

4
Trong python 3.4, nếu có 404, urllib.request.urlopentrả về a urllib.error.HTTPError.
mcb

Không hoạt động trong python 2.7. Nếu HTTP trả về 400, một ngoại lệ được ném ra
Nadav B

86

Bạn cũng có thể sử dụng 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()

Lưu ý rằng đó HTTPErrorlà một lớp con URLErrorlưu mã trạng thái HTTP.


Điều thứ hai elsecó phải là một sai lầm?
Samy Bencherif

@NadavB Đối tượng ngoại lệ 'e' sẽ giống như một đối tượng phản hồi. Đó là, nó giống như một tệp và bạn có thể 'đọc' tải trọng từ nó.
Joe Holloway

37

Đối với 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')

Đối với URLError print(e.reason) có thể được sử dụng.
Gitnik

Về http.client.HTTPExceptionthì sao?
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 quan tâm đến việc lấy mã yêu cầu http (200, 404, 500, v.v.) không phải là một lỗi chung do urllib2 đưa ra.
Joshua Burns
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.