72

「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

4

3 に答える 3

136

HTTPError ファイルのようなオブジェクトです。あなたはそれを捕まえて、それからreadその内容を捕まえることができます。

try:
    resp = urllib2.urlopen(url)
    contents = resp.read()
except urllib2.HTTPError, error:
    contents = error.read()
于 2010-02-10T01:18:53.647 に答える
9

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をオーバーライドするのではなく、例外を処理するだけです。

于 2010-02-10T00:59:42.483 に答える
-1
alist=['http://someurl.com']

def testUrl():
    errList=[]
    for URL in alist:
        try:
            urllib2.urlopen(URL)
        except urllib2.URLError, err:
            (err.reason != 200)
            errList.append(URL+" "+str(err.reason))
            return URL+" "+str(err.reason)
    return "".join(errList)

testUrl()
于 2016-04-10T11:40:07.727 に答える