开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情
简介
HTTPError类是URLError类的子类- 包路径:
urllib.error.HTTPError - http异常:是指针对浏览器无法连接到服务器而增加出来的错误提示,引导并告诉浏览者该页面出现问题的地方。
- 通过
urllib发送请求的时候,有可能会发送失败,这个时候如果不想让代码中断运行,可以通过try-except来捕获相关的异常,异常类型有URLError\HTTPError。
案例演示
当我们在爬取数据的过程中,如果遇到网络问题或者一些其它的问题,导致了请求无法得到响应,程序就会抛出异常,例如抓取自己掘金的主页:
import urllib.request
import urllib.parse
# 创建请求对象
def create_request(page):
url = 'https://juejin.cn/user/2670059720028061'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.116 Safari/537.36'
}
return urllib.request.Request(url=url, headers=headers)
# 得到响应数据
def getResponseData(request):
response = urllib.request.urlopen(request)
return response.read().decode('utf-8')
if __name__ == '__main__':
request = create_request(1)
result = getResponseData(request)
print(result)
正常的情况获取到的结果如上图所示,能够拿到返回页面的源码。但如果请求有问题,例如url错了或者是其它的原因,则程序就会发生异常:
为了防止因为该类的异常造成程序的中止,我们需要考虑对代码块进行相关的异常信息捕获。通过try-except来捕获对应的异常信息,给出友好的提示内容。
import urllib.request
import urllib.parse
import urllib.error
# 创建请求对象
def create_request(page):
url = 'https://juejin.cn/user/26700597200280611111'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.116 Safari/537.36'
}
return urllib.request.Request(url=url, headers=headers)
# 得到响应数据
def getResponseData(request):
response = urllib.request.urlopen(request)
return response.read().decode('utf-8')
if __name__ == '__main__':
try:
request = create_request(1)
result = getResponseData(request)
print(result)
except urllib.error.HTTPError:
print('系统升级中......')
上面的异常是HTTPError,一般是参数之类错误导致的,还有一种异常类似是URLError,这种一般是访问无效域名导致的,如下图所示: