ใน Python ฉันจะใช้ urllib เพื่อดูว่าเว็บไซต์เป็น 404 หรือ 200 ได้อย่างไร


คำตอบ:


176

เมธอด getcode () (เพิ่มใน python2.6) จะส่งคืนรหัสสถานะ HTTP ที่ถูกส่งไปพร้อมกับการตอบกลับหรือไม่มีหาก URL ไม่ใช่ HTTP URL

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

หากต้องการใช้ใน python 3 ให้ใช้from urllib.request import urlopenไฟล์.
Nathanael Farley

4
ใน python 3.4 ถ้ามี 404 urllib.request.urlopenจะส่งกลับไฟล์urllib.error.HTTPError.
mcb

ไม่ทำงานใน python 2.7 หาก HTTP ส่งคืน 400 ข้อยกเว้นจะถูกโยน
Nadav B

86

คุณสามารถใช้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()

โปรดทราบว่าHTTPErrorเป็นคลาสย่อยURLErrorที่เก็บรหัสสถานะ HTTP


ครั้งที่สองelseเป็นความผิดพลาดหรือไม่?
Samy Bencherif

@NadavB วัตถุข้อยกเว้น 'e' จะดูเหมือนวัตถุตอบสนอง นั่นคือมันเหมือนไฟล์และคุณสามารถ 'อ่าน' เพย์โหลดจากมันได้
Joe Holloway

37

สำหรับ 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')

สำหรับURLError print(e.reason)สามารถใช้ได้
Gitnik

เกี่ยวกับอะไร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 สนใจที่จะคว้ารหัสคำขอ http (200, 404, 500 ฯลฯ ) ไม่ใช่ข้อผิดพลาดทั่วไปที่ urllib2 ส่งมา
Joshua Burns
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.