Dengan Python, bagaimana cara menggunakan urllib untuk melihat apakah sebuah situs web adalah 404 atau 200?


Jawaban:


176

Metode getcode () (Ditambahkan dalam python2.6) mengembalikan kode status HTTP yang dikirim bersama respons, atau Tidak ada jika URL bukan URL HTTP.

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

Untuk menggunakan python 3, cukup gunakan from urllib.request import urlopen.
Nathanael Farley

4
Di python 3.4, jika ada 404, urllib.request.urlopenmengembalikan a urllib.error.HTTPError.
mcb

Tidak berfungsi di python 2.7. Jika HTTP mengembalikan 400, pengecualian akan dilemparkan
Nadav B

86

Anda juga dapat menggunakan 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()

Perhatikan bahwa HTTPErrorsubclass URLErroryang menyimpan kode status HTTP.


Apakah elsekesalahan kedua ?
Samy Bencherif

@NadavB Objek pengecualian 'e' akan terlihat seperti objek respons. Artinya, ini seperti file dan Anda dapat 'membaca' muatan darinya.
Joe Holloway

37

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

Untuk URLError print(e.reason) bisa digunakan.
Gitnik

Tentang apa 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 tertarik untuk mengambil kode permintaan http (200, 404, 500, dll) bukan kesalahan umum yang dilemparkan oleh urllib2.
Joshua Burns
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.