python爬虫学习8

python爬虫学习8

  • 异常处理

    我们已经知道如何发送请求,但是在网络不好的情况下,如果出现异常该怎么办?

    urllib库中的error模块定义了由request模块产生的异常。

    • URLError
    # URLError 类来自urllib库中的error模块,继承自 OSError 类,是error异常处理模块的基类。
    
    from urllib import request,error
    
    url = 'https://cuiqingcai.com/404'
    
    try:
        resp = request.urlopen(url)
    except error.URLError as e:
        print(e.reason)
    

    运行结果,我们打开了一个不存在的页面,照理来说会报错,但是我们捕获了这个异常:

    在这里插入图片描述

    • HTTPError
      • 是URLError的子类,专门用来处理HTTP请求错误,有以下三个属性:
        • code 返回HTTP状态码,例如404(网页不存在),500(服务器内部错误)
        • reason 同父类,用于返回错误原因。
        • headers 返回请求头。
      • 实例
      # HTTPError 类
      from urllib import request,error
      
      url = 'https://cuiqingcai.com/404'
      
      try:
          resp = request.urlopen(url)
      except error.HTTPError as e:
          print(e.reason,e.code,e.headers,sep='\n')
      

      运行结果:

      在这里插入图片描述

      • 因为URLError是HTTPError的父类,所以可以选择先捕获子类的错误,再捕获父类。
      from urllib import request,error
      
      url = "https://cuiqingcai.com/404"
      
      try:
          resp = request.urlopen(url)
      except error.HTTPError as e0:
          print(e0.reason, e0.code, e0.headers, sep='\n')
      except error.URLError as e1:
          print(e1.reason)
      else:
          print('请求成功!')
      
      • 有时 reason返回的不一定是一个字符串,也可能是一个对象:
      import socket
      import urllib.request
      import urllib.error
      
      url = 'https://www.baidu.com'
      timeout = 0.01
      
      try:
          resp = urllib.request.urlopen(url,timeout=timeout)
      except urllib.error.URLError as e:
          print(e.reason)
          if isinstance(e.reason,socket.timeout):
              print('Time Out !')
      

      可以看出,reason属性的结果是一个socket.timeout类:

      在这里插入图片描述

  • 解析连接

    前面我们知道,urllib中的parse模块定义了处理URL的接口,通过调用该模块我们可以实现,例如URL各部分的抽取、合并以及连接转换。

    下面,让我们一起了解几个parse模块中的常用方法:

    • urlparse
      import urllib.parse
      
      # prase.urlparse
      
      url = "https://baike.baidu.com/item/Python/407313?fr=aladdin"
      result = urllib.parse.urlparse(url)
      
      print(type(result))
      print(result)
      

      运行结果:

      在这里插入图片描述

      可以看到结果是一个 urllib.parse.ParseResult 类,共包含六部分:

      • scheme
      • netloc
      • path
      • params
      • query
      • fragment

未完待续

好吧,它好像断在了奇奇怪怪的地方了。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值