Urllib2.httperror 또는 urllib.error.httperror를 우선시하고 읽기 응답 html 어쨌든
-
19-09-2019 - |
문제
'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()
제휴하지 않습니다 StackOverflow