web-dev-qa-db-ja.com

とにかくurllib2.HTTPErrorまたはurllib.error.HTTPErrorをオーバーライドし、応答HTMLを読み取る

「HTTPエラー500:内部サーバーエラー」応答を受け取りましたが、エラーHTML内のデータを読み取りたいです。

Python 2.6では、私は通常、次を使用してページを取得します:

import urllib2
url = "http://google.com"
data = urllib2.urlopen(url)
data = data.read()

失敗したURLでこれを使用しようとすると、例外urllib2.HTTPErrorが表示されます。

urllib2.HTTPError: HTTP Error 500: Internal Server Error

内部サーバーエラーを返している間に、このようなエラーページ(urllib2の有無にかかわらず)を取得するにはどうすればよいですか?

Python 3の場合、対応する例外はurllib.error.HTTPErrorです。

72
Backus

HTTPErrorファイルのようなオブジェクト 。キャッチして、その内容をreadできます。

try:
    resp = urllib2.urlopen(url)
    contents = resp.read()
except urllib2.HTTPError, error:
    contents = error.read()
135
Joe Holloway

500の本文を読みたい場合:

request = urllib2.Request(url, data, headers)
try:
        resp = urllib2.urlopen(request)
        print resp.read()
except urllib2.HTTPError, error:
        print "ERROR: ", error.read()

あなたの場合、リクエストを作成する必要はありません。ただやる

try:
        resp = urllib2.urlopen(url)
        print resp.read()
except urllib2.HTTPError, error:
        print "ERROR: ", error.read()

そのため、urllib2.HTTPErrorをオーバーライドせず、例外を処理するだけです。

9
sberry