04Python爬虫---DebugLog和URLError的运用

时间:2021-11-26 07:22:19

一、DebugLog

  有时我们希望边运行程序边打印调试日志,此时就需要开启DebugLog。
开启步骤:

  1、分别使用 urllib. request Httphandler(和 urllib. request. Httpshandlero将 debuglevel设置为1

  2、使用 urllib request build opener0创建自定义的 opener对象,并使用1)中设置的值作为参数。

  3、用 urllib request install opener0创建全局默认的 opener对象,这样,在使用urlopeno时,也会使用我们安装的 opener对象。

  4、进行后续相应的操作,比如 urlopeno等。此时,根据以上思路,我们可以通过如下代码开启 Debug Log:

import urllib.request

httphd = urllib.request.HTTPHandler(debuglevel=1)

httpshd = urllib.request.HTTPSHandler(debuglevel=1)

opener = urllib.request.build_opener(httphd, httpshd)

urllib.request.install_opener(opener)  # 创建全局默认的opener对象

data = urllib.request.urlopen("http://www.51cto.com")

二、异常处理神器——URLError实战

(1)URLError

import urllib.request
import urllib.error

""" URLError原因: 1.连接不上服务器 2.远程URL不存在 3.无网络 4.触发了HTTPError """
try:
    data = urllib.request.urlopen("http://www.baidusadoasd.com")
    print(data.read())
except urllib.error.URLError as e:
    print(e.reason)

(2) HTTPError

HTTPError为URLError的子类,这种方法只能处理以上四中情况中的第四种情况

 try:
     data = urllib.request.urlopen("http://www.baidusadoasd.com")
     print(data.encode)
 except urllib.error.HTTPError as e:
     print(e.code)
     print(e.reason)

(3)实际运用中优化代码

try:
    data = urllib.request.urlopen("http://www.baidusadoasd.com")
    print(data.read())
except urllib.error.HTTPError as e:  # 先让子类HTTPError进行处理
    print(e.code)
    print(e.reason)
except urllib.error.URLError as e:  # 若子类无法进行处理,再让URLError进行处理
    print(e.reason)

(4)代码优化(简化代码)

try:
    data = urllib.request.urlopen("http://www.baidusadoasd.com")
    print(data.read())
except urllib.error.URLError as e:
    if hasattr(e,"code"):  # 使用hasattr函数判断是否有这些属性
        print(e.code)
    if hasattr(e, "reason"):
        print(e.reason)

(5)异常码

    200 OK
        一切正常

    300 Moved Permanently
        重定向到新的URL,永久性

    302 Found
        重定向到临时的URL,非永久性

    304 Not Modified
        请求的资源未更新

    400 Bad Request
        非法请求

    401 Unauthorized
        请求未经授权

    403 Forbidden
        禁止访问

    404 Not Found
        没有找到对应的页面

    500 Internal Server Error
        服务器内部出现错误

    501 Not Implemented
        服务器不支持实现请求所需的功能