python 的request库

其实在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库_第1张图片
    图片发自App

在使用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库_第2张图片
图片发自App

使用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库_第3张图片
图片发自App

总结

  • 带参数的请求

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

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

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

你可能感兴趣的:(python 的request库)