重写urllib2.HTTPError或urllib.error.HTTPError反正阅读HTML响应
-
19-09-2019 - |
题
我收到“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
。
解决方案
在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