Urllib2.httperror 또는 urllib.error.httperror를 우선시하고 읽기 응답 html 어쨌든

StackOverflow https://stackoverflow.com/questions/2233687

문제

'HTTP Error 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.

도움이 되었습니까?

해결책

그만큼 HTTPError 파일과 같은 객체입니다. 당신은 그것을 잡을 수 있습니다 read 내용.

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

다른 팁

당신이 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를 무시하지 않고 예외를 처리합니다.

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()
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top