Python進階記錄之requests模塊

Python JSON HTML 網絡爬蟲 開源軟件 python進階者 2019-07-03

回顧

在《Python進階記錄之HTMLParser模塊》中,我們介紹了Python內置的HTML解析庫HTMLParser的基本用法,並配合urllib模塊和re模塊實現了獲取指定新聞內容的功能。今天我們講一下Python第三方網絡請求庫——requests模塊。

requests模塊簡介與安裝

requests是基於Python內置的urllib模塊編寫而成的,採用的是Apache2 Licensed開源協議的HTTP庫,requests封裝了urllib庫,使用起來比urllib更加方便,可以幫助我們更方便地進行網絡請求。

由於requests模塊不是Python內置的資源庫,因此,我們需要自己去安裝這個第三方庫。安裝方法很簡單,只需使用以下命令即可。

pip install requests

當然,如果你安裝了Anaconda,那麼它已經幫你安裝好了requests模塊,直接用就可以了。另外,如果你同時安裝了Python2和Python3,那麼你可能需要根據開發環境選擇使用pip還是pip3命令。

requests模塊的簡單使用

requests模塊可以實現urllib模塊基本上所有的功能,且使用方法更加簡單。

  • get請求

requests模塊進行get請求調用get( )方法,傳入url、headers等參數即可。

Python進階記錄之requests模塊

get請求

requests自動檢測編碼,使用encoding屬性可以查看當前編碼,我們也可以通過修改encoding屬性來設置請求時使用的編碼。另外,通過content屬性可以獲取請求結果的二進制模式,用於文件下載。

get請求也可以帶參數,requests模塊的get( )方法支持接收字典作為params參數將請求參數傳入。

Python進階記錄之requests模塊

get請求帶參數

這裡我們借用httpbin這個網站,通過該網站我們可以測試HTTP請求和響應的各種信息,比如 cookie、ip、headers和登錄驗證等,httpbin支持GET、POST等多種請求方法。

get請求的參數會自動拼接到url後面,請求後得到相應的請求結果。如果使用urllib的get請求,我們想對請求結果進行json序列化,需要借用json模塊,調用json.loads( )方法。而requests對於特定類型的響應非常方便,通過json( )方法就可以直接獲取json序列化結果。

  • post請求

requests模塊進行post請求調用post( )方法,同樣地,它也接收url、headers等參數。我們仍然藉助httpbin網站進行post請求測試,與get方法傳參使用params參數不同,post請求傳參我們將待傳參數的字典傳給data參數。

Python進階記錄之requests模塊

post請求

post請求參數不會拼接在url後面。此外,requests模塊默認使用application/x-www-form-urlencoded格式對post數據進行編碼。我們可以從返回結果中看到,請求參數在form中,並且headers頭信息中的Content-Type為application/x-www-form-urlencoded。

如果我們要傳遞json數據,只需將原本傳給data的請求參數傳給json參數即可。

Python進階記錄之requests模塊

傳遞json數據

再次運行代碼,可以看到,此時請求參數在data中了,並且headers頭信息中的Content-Type為application/json。

如果我們要上傳一個文件到服務器,通常需要更復雜的編碼格式,但是requests模塊幫助我們把這種複雜的編碼格式簡化成了files參數。

Python進階記錄之requests模塊

上傳文件

使用requests模塊的post( )方法,我們只需要將通過open方法打開的文件包裝傳遞給files參數即可。

此外,requests模塊對Cookie做了特殊處理。因此,使用requests模塊進行網絡請求時,我們不必解析Cookie就可以輕鬆獲取到指定的Cookie信息。

Python進階記錄之requests模塊

Cookie

通過cookies屬性,我們可以得到請求結果的Cookie。當我們知道Cookie具體信息時,還可以通過cookies['key']的方式得到指定的Cookie值,在下一次請求時就可以帶上Cookie進行請求了。在編寫爬蟲的過程中,Cookie是我們經常使用的一個屬性,我們通常會在請求時帶上Cookie,具體我們在爬蟲專題時再深入展開。

總結

以上內容介紹了Python第三方網絡請求庫requests模塊的基本概念和簡單用法,需要重點掌握使用requests模塊進行get/post請求。requests模塊是我們開發中主要的網絡請求工具,在日後的學習與實際開發中會經常遇到。感謝大家的支持與關注,歡迎一起學習交流~

相關推薦

推薦中...