urllib與requests的對比

2021-08-10 15:24:47 字數 2939 閱讀 4594

在http相關處理中使用python是不必要的麻煩,這包括urllib2模組以巨大的複雜性代價獲取綜合性的功能。相比於urllib2,kenneth reitz的requests模組更能簡約的支援完整的簡單用例。

簡單的例子:

想象下我們試圖使用get方法從獲取資源並且檢視返回**,content-type頭資訊,還有response的主體內容。這件事無論使用urllib2 或者requests都是很容易實現的。

urllib2

[python] view plaincopy

>>> 

import urllib2

>>> url = ''

>>> response = urllib2.urlopen(url)

>>> response.getcode()

200>>> response.headers.getheader('content-type')

'text/html; charset=utf-8'

>>> response.read()

'hello, world!'

requests

[plain] view plaincopy

>>> 

import requests

>>> url = ''

>>> response = requests.get(url)

>>> response.status_code

200>>> response.headers['content-type']

'text/html; charset=utf-8'

>>> response.content

u'hello, world!'

這兩種方法很相似,相對於urllib2呼叫方法讀取response中的屬性資訊,requests則是使用屬性名來獲取對應的屬性值。

兩者還有兩個細微但是很重要的差別:

1 requests 自動的把返回資訊有unicode解碼

2 requests 自動儲存了返回內容,所以你可以讀取多次,而不像urllib2.urlopen()那樣返回的只是乙個類似檔案型別只能讀取一次的物件。

第二點是在python互動式環境下操作**很令人討厭的事情

乙個複雜一點的例子:現在讓我們嘗試下複雜點得例子:使用get方法獲取的資源,這次需要基本的http驗證。使用上面的**作為模板,好像我們只要把urllib2.urlopen() 到requests.get()之間的**換成可以傳送username,password的請求就行了

這是urllib2的方法:

'welcome to the secret page!'乙個簡單的方法中例項化了2個類,然後組建了第三個類,最後還要裝載到全域性的urllib2模組中,最後才呼叫了urlopen,那麼那兩個複雜的類是什麼的

迷惑了嗎, 這裡所有urllib2的文件

那requests是怎麼樣解決同樣的問題的呢?

requests

[plain] view plaincopy

>>> 

import requests

>>> url = 'secret'

>>> response = requests.get(url, auth=('dan', 'h0tdish'))

>>> response.status_code

200>>> response.content

u'welcome to the secret page!'

只是在呼叫方法的時候增加了乙個auth關鍵字函式

我敢打賭你不用查文件也能記住。

錯誤處理 error handlingrequests 對錯誤的處理也是很非常方面。如果你使用了不正確的使用者名稱和密碼,urllib2會引發乙個urllib2.urlerror錯誤,然而requests 會像你期望的那樣返回乙個正常的response物件。只需檢視response.ok的布林值便可以知道是否登陸成功。

[python] view plaincopy

>>> response = requests.get(url, auth=('dan', 'wrongpass'))  

>>> response.ok

false

其他的一些特性:

* requests對於head, post, put, patch, 和 delete方法的api同樣簡單

* 它可以處理多部分上傳,同樣支援自動轉碼

* 文件更好

* 還有更多

requests 是很好的,下次需要使用http時候可以試試。

requests與urllib庫的區別

個人學習收藏,侵刪 我們在使用python爬蟲時,需要模擬發起網路請求,主要用到的庫有requests庫和python內建的urllib庫,一般建議使用requests,它是對urllib的再次封裝,它們使用的主要區別 requests可以直接構建常用的get和post請求並發起,urllib一般要...

requests和urllib的區別

基本的區別是獲得的response 1.傳送get請求,例如 r requests.get 2.傳送post請求,例如 r requests.post 3.得到的響應內容 就是指get傳送以後的請求 響應的內容包含響應行 響應報頭 響應正文。響應正文 r.content 通用版 可以自動轉出成取文字...

requests庫和urllib包對比

python中有多種庫可以用來處理http請求,比如python的原生庫 urllib包 requests類庫。urllib和urllib2是相互獨立的模組,python3.0以上把urllib和urllib2合併成乙個庫了,requests庫使用了urllib3。requests庫的口號是 htt...