python 的request库

作者: hopevow | 来源:发表于2016-10-18 23:27 被阅读297次

    其实在python中还有自带的urllib, urllib2, urllib3,而request是国外程序开发的第三方库,至于他们的关系嘛,urllib和urllib2是相互独立的关系,而request则使用了urllib3,其优点是多次请求重复使用一个socket,你想三次握手多麻烦,建立一个socket复用当然能提高效率不是。
    当然了,使用这些的基础是对http协议要有一定的认识最好,没有的话只要你对发信收信的过程有一个概念就可以了。


    所需:
    pip install virtualenv(可选)
    pip install request
    pip install gunicorn


    话不多说show you the code:

    • urllib2
      其实在我的豆瓣爬虫中就使用过urllib2,有兴趣的可以移步瞅一眼
    #coding=utf-8
    import urllib2
    import urllib
    
    url = "http://httpbin.org/ip"
    geturl = "http://httpbin.org/get"
    def urllib2test():
        response = urllib2.urlopen(url)
        #响应头信息
        print "====responseheaders===="
        print response.info()
        #响应体
        print "====responsbody===="
        print ''.join([item for item in response.readlines()])
        
    def urllibget():
        params = urllib.urlencode({'param1': 'hello','param2': 'world'})
        response = urllib2.urlopen('?'.join([geturl, '%s'])%params)
        #响应头信息
        print "====responseheaders===="
        print response.info()
        #响应体
        print "====responsbody===="
        print ''.join([item for item in response.readlines()])
        
        
    if __name__ == "__main__":
        urllib2test()
        urllibget()
    

    这是一个简单的urllib2的使用,我们可以对其响应部分像读取文件一样操作

    [item for item in response.readlines()]是序列推导式,相当于:
    result = [];
    for item in response.readlines():
          result.append(item)
    
    • 运行结果


      python 的request库

    在使用request时,就简单了:

    #coding="utf-8
    import requests
    ipurl = "http://httpbin.org/ip"
    geturl = "http://httpbin.org/get"
    
    
    def printinfo(res):
        print ">>>>headers"
        print res.headers
        print ">>>>code"
        print res.status_code
        print ">>>>boyd"
        print res.text
        print ">>>>jsondata"
        print res.json()
    
    response1 = requests.get(ipurl)
    printinfo(response1)
    params = {'param1':'hello','param2':'world'}
    response2 = requests.get(geturl, params = params)
    printinfo(response2)
    

    *运行结果:


    python 的request库

    使用requests和github通信

    #coding="utf-8"
    import json
    import requests
    
    URL = 'https://api.github.com'
    
    def build_uri(endpoint):
        return '/'.join([URL,endpoint])
        
    def better_print(json_str):
        return json.dumps(json.loads(json_str), indent = 4)
        
    def request_method():
        response = requests.get(build_uri('users/hopevow'))
        print better_print(response.text)
        
    if __name__ == '__main__':
        request_method()
    

    运行结果


    python 的request库

    总结

    • 带参数的请求

    GET
    request.get(url, params={'key1':'value1'}

    POST
    request.post(url, data = {'key1':'value1})

    JSON参数提交
    request.post(url, json={'key1':'value1'})

    相关文章

      网友评论

        本文标题:python 的request库

        本文链接:https://www.haomeiwen.com/subject/bwvtuttx.html