最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Python中的opener()方法是什么

    正文概述    2020-07-06   209

    当我们爬取百度首页的 html时,我们用到的是 urlopen 来打开请求,它是一个特殊的opener(也就是模块帮我们构建好的)。但是基本的 urlopen() 方法不支持代理、cookie等其他的HTTP/HTTPS高级功能,所以我们需要用到 Python 的 opener 来自定义我们的请求内容。

    Python中的opener()方法是什么

    具体步骤:

    (1)使用相关的 Handler处理器 来创建特定功能的处理器对象;

    (2)然后通过 build_opener()方法使用这些处理器对象,创建自定义opener对象;

    (3)使用自定义的opener对象,调用open()方法发送请求。

    我们先来回顾一下使用 urlopen 获取百度首页的 html 代码实例:

    # 导入urllib 库
    import urllib.request
    
    # url 作为Request()方法的参数,构造并返回一个Request对象
    request = urllib.request.Request("http://www.baidu.com")
    # Request对象作为urlopen()方法的参数,发送给服务器并接收响应
    response = urllib.request.urlopen(request)
    # 类文件对象支持 文件对象的操作方法,如read()方法读取文件全部内容,返回字符串
    html = response.read().decode("utf-8")
    # 打印字符串
    print(html)

    接下来我们看一下使用 opener 的处理方式:

    from urllib import request
    
    # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
    http_handler = request.HTTPHandler()
    
    # 构建一个HTTPSHandler 处理器对象,支持处理HTTPS请求
    # http_handler = request.HTTPSHandler()
    
    # 调用 request.build_opener()方法,创建支持处理HTTP请求的opener对象
    opener = request.build_opener(http_handler)
    
    # 构建 Request请求
    request = request.Request("http://www.baidu.com/")
    
    # 调用自定义opener对象的open()方法,发送request请求
    response = opener.open(request)
    
    # 获取服务器响应内容
    html = response.read().decode("utf-8")
     
    # 打印字符串
    print(html)

    在上面的第一段代码中,我们是通过直接  import urllib.request   来导入我们需要的包,这样当我们要使用时需要   urllib.request   来使用,第二段代码我们是通过  from urllib import request  来导入我们需要的包,这样当我们使用时直接  request 来使用就可以了。

    相关推荐:《Python视频教程》

    第一段代码在前面的文章中我们已经说过了,这里就不多做解释了。

    第二段代码中,我们使用了 opener 的方法来处理我们的请求,这样我们就可以对代理,cookie 等做进一步的操作,后续文章会讲到。最终结果如下:

    Python中的opener()方法是什么

    在http_handler = request.HTTPHandler()中,我们还可以添加一个  debuglevel=1 参数,会将Debug Log打开,这样程序在执行的时候,会把收包和发包的报头在屏幕上自动打印出来,方便调试,有时可以省去抓包的工作。

    代码如下:

    from urllib import request
    
    # 构建一个HTTPHandler 处理器对象,支持处理HTTP请求
    http_handler = request.HTTPHandler(debuglevel=1)
    
    # 构建一个HTTPHandler 处理器对象,支持处理HTTPS请求
    # http_handler = request.HTTPSHandler(debuglevel=1)
    
    # 调用 request.build_opener()方法,创建支持处理HTTP请求的opener对象
    opener = request.build_opener(http_handler)
    
    # 构建 Request请求
    request = request.Request("http://www.baidu.com/")
    
    # 调用自定义opener对象的open()方法,发送request请求
    response = opener.open(request)
    
    # 获取服务器响应内容
    html = response.read().decode("utf-8")
    
    # 打印字符串
    print(html)

    输出结果如下:

    Python中的opener()方法是什么

    可以看出在响应结果的时候会为我们打印输出一些请求信息。


    下载网 » Python中的opener()方法是什么

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元