zoukankan      html  css  js  c++  java
  • requests库和urllib包对比

    requests库和urllib包对比

    一、总结

    一句话总结:

    python3.0以上把urllib和urllib2合并成一个库了,requests库使用了urllib3,requests库使用比urllib简洁方便不少

    二、requests库和urllib包对比

    转自或参考:requests库和urllib包对比 - 疯了的小蜗 - 博客园
    https://www.cnblogs.com/insane-Mr-Li/p/9876774.html

    python中有多种库可以用来处理http请求,比如python的原生库:urllib包、requests类库。urllib和urllib2是相互独立的模块,python3.0以上把urllib和urllib2合并成一个库了,requests库使用了urllib3。requests库的口号是“HTTP For Humans”,为人类使用HTTP而生,用起来不知道要比python原生库好用多少呢,比起urllib包的繁琐,requests库特别简洁和容易理解。话不多说,代码为证~~~

    下面我们来分别使用urllib包和requests库写一个get请求,进行一下对比,如下图:

    #-*- coding:utf8 -*-
    import urllib2
    import urllib
     
    URL_GET = "https://api.douban.com/v2/event/list"
     
    def use_params_urllib2():
        #构建请求参数
        params = urllib.urlencode({'loc':'108288','day_type':'weekend','type':'exhibition'})
        print 'Request Params:'
        print params
        #发送请求
        response = urllib2.urlopen('?'.join([URL_GET,'%s'])%params)
        #处理响应
        print '>>>>>>Response Headers:'
        print response.info()
        print 'Status Code:'
        print response.getcode()
        print'>>>>>>>Response Body:'
        print response.read()
        
    if __name__ == '__main__':
        print 'Use params urllib2:'
        use_params_urllib2()
    #-*- coding:utf8 -*-
    import requests
     
    URL_GET = "https://api.douban.com/v2/event/list"
     
    def use_params_requests():
        #构建请求参数
        params = {'loc':'108288','day_type':'weekend','type':'exhibition'}
        #发送请求
        response = requests.get(URL_GET,params=params)
        #处理响应
        print '>>>>>>Response Headers:'
        print response.headers
        print '>>>>>>Status Code:'
        print response.status_code
        print'>>>>>>>Response Body:'
        print response.text
       
    if __name__ == '__main__':
     
        print 'Use params requests:'
        use_params_requests()

    第一种使用的是urllib包,第二种使用的是requests库,从以下几个方面进行对比:

    1)构建参数:在构建请求参数时,第一种需要将请求参数使用urllib库的urlencode方法进行编码预处理,非常麻烦

    2)请求方法:发送get请求时,第一种使用的urllib库的urlopen方法打开一个url地址,而第二种直接使用requests库的get方法,与http请求方式是对应的,更加直接、易懂

    3)请求数据:第一种按照url格式去拼接一个url字符串,显然非常麻烦,第二种按顺序将get请求的url和参数写好就可以了

    4)处理响应:第一种处理消息头部、响应状态码和响应正文时分别使用.info()、.getcode()、.read()方法,第二种使用.headers、.status_code、.text方法,方法名称与功能本身相对应,更方便理解、学习和使用

    5)连接方式:看一下返回数据的头信息的“connection”,使用urllib库时,"connection":"close",说明每次请求结束关掉socket通道,而使用requests库使用了urllib3,多次请求重复使用一个socket,"connection":"keep-alive",说明多次请求使用一个连接,消耗更少的资源

    6)编码方式:requests库的编码方式Accept-Encoding更全,在此不做举例

    由此可见,requests库更容易理解和阅读,符合Python哲学“Readability counts”,可读性很重要~更利于开发人员学习和使用,那就让我们一起开启python-requests库的学习之旅吧~

    PS:

    1.requests库的官网是http://www.python-requests.org/en/master/,里面有操作文档

    2.requests库的作者是一个来自欧洲的爱好摄影的小哥哥,名叫Kenneth Reitz,他的个人网站:https://www.kennethreitz.org/,里面有他的帅照哦哈哈哈

     
  • 相关阅读:
    第九章 统一连贯的段落 《英语科技写作(文法与修辞原则)》by 方克涛
    第八章 通顺的句子 《英语科技写作(文法与修辞原则)》by 方克涛
    CMake使用操作解析参考1
    发一个SharePoint修改好式样的菜单导航
    Jquery Ajax学习实例4向WebService发出请求,返回实体对象的异步调用
    修改SharePoint网站最大上载大小时有时需要关注的事项
    轻松Ajax.net实例教程13_TextBoxWatermarkExtender(按AjaxControlToolkit字母排序)
    Jquery Ajax学习实例2向页面发出请求,返回JSon格式数据
    Jquery Ajax学习实例3向WebService发出请求,调用方法返回数据
    CSS语法学习总结
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/13257861.html
Copyright © 2011-2022 走看看