Python3,爬虫的HTTP Error、URL Error及混合使用。

举报
Carl_奕然 发表于 2023/03/17 15:25:16 2023/03/17
1.6k+ 0 0
【摘要】 终于知道了爬虫错误的使用方式了。

爬虫常出现的两种error

1. URL ERROR


url error 很常见的,就是url地址不正确,或者失效
我们来看看 代码是怎么实现的

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-8-20
"""

from urllib import request
from urllib import error

#定义一个不存在的url 地址
url = 'https://www.baidu1.com'
#获取返回结果
req = request.Request(url)

#追加断言
try:
    response = request.urlopen(requst)
    html = response.read().decode('utf-8')
    print(html)
except error.URLError as e:
    print(e.reason)


    执行后的结果:

[Errno 11001] getaddrinfo failed


这个执行结果意思就是:获取地址错误

2.HTTP Error

# -*- coding: utf-8 -*-
"""
@ auth : carl_DJ
@ time : 2020-8-20
"""

from urllib import request
from urllib import error

#定义一个不存在的url 地址
url = 'https://www.baidu1.com'
#获取返回结果
req = request.Request(url)

#追加断言
try:
    response= urllib.request.urlopen(req)
    # html = response.read()

except urllib.error.HTTPError as e:
    print(f"HTTP Error is :" ,e.code)


同样,看一下运行结果:

HTTP Error is : 403



#code 属性表明 HTTPError
#reason 属性表明 URLError
#403 ⇒请求被服务器拒绝了

3. HTTP Error 和URL Error 混合使用


接下来,我们看一下 同时使用时,是什么情况。
老规矩,上代码:

# -*- coding: utf-8 -*-
# @ auth : carl_DJ
# @ time : 2020-8-20

"""
如果httperr 和urlerr混用,那么需要把HTTPerr放在 urlerr的前面,
因为 httperr 是URlerr 一个子类

可以使用hasstattr函数来判断urlerr含有的属性:
code属性表明 httperror
reason 属性表明 urlerror

"""

from urllib import error
from urllib import request

#定义一个不存在的url地址
url = "http://www.douyu.com/Jack_Cui.html"

req = request.Request(url)

print("----URLError错误信息-------")
try:
    response = request.urlopen(req)
    html = response.read().decode('utf -8')
    print(html)
except error.URLError as e:
    print("URLError:%s" %e.reason)
    print("\n" )
print("----HTTPError错误信息-------")
try:
    response = request.urlopen(req)
except error.HTTPError as a:
    print("HTTPError:%s" %a.code)
    print("\n" )

print("----URLError和HTTPError混合使用-------")
try:
    response = request.urlopen(url)
except error.URLError as s:

    if hasattr(s,'code'):
        print("HTTPError")
        print(s.code)
    elif hasattr(s,'reason'):
        print("URLError")
        print(s.reason)


看一下运行结果:

在这里插入图片描述

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

作者其他文章

评论(0

抱歉,系统识别当前为高风险访问,暂不支持该操作

    全部回复

    上滑加载中

    设置昵称

    在此一键设置昵称,即可参与社区互动!

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

    *长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。