1. 程式人生 > >python的requests類庫(一)requests庫和urllib包對比:一個簡單get請求

python的requests類庫(一)requests庫和urllib包對比:一個簡單get請求

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

2.requests庫的作者是一個來自歐洲的愛好攝影的小哥哥,名叫Kenneth Reitz,他的個人網站:https://www.kennethreitz.org/,裡面有他的帥照哦哈哈哈