Python爬蟲利器一之Requests庫的用法

前言

以前咱們用了 urllib 庫,這個做爲入門的工具仍是不錯的,對了解一些爬蟲的基本理念,掌握爬蟲爬取的流程有所幫助。入門以後,咱們就須要學習一些更加高級的內容和工具來方便咱們的爬取。那麼這一節來簡單介紹一下 requests 庫的基本用法。html

注:Python 版本依然基於 2.7python

官方文檔

如下內容大多來自於官方文檔,本文進行了一些修改和總結。要了解更多能夠參考git

官方文檔github

安裝

利用 pip 安裝web

或者利用 easy_installjson

經過以上兩種方法都可以完成安裝。api

引入

首先咱們引入一個小例子來感覺一下瀏覽器

以上代碼咱們請求了本站點的網址,而後打印出了返回結果的類型,狀態碼,編碼方式,Cookies等內容。服務器

運行結果以下cookie

怎樣,是否是很方便。別急,更方便的在後面呢。

基本請求

requests庫提供了http全部的基本請求方式。例如

嗯,一句話搞定。

基本GET請求

最基本的GET請求能夠直接用get方法

若是想要加參數,能夠利用 params 參數

運行結果

若是想請求JSON文件,能夠利用 json() 方法解析

例如本身寫一個JSON文件命名爲a.json,內容以下

利用以下程序請求並解析

運行結果以下,其中一個是直接輸出內容,另一個方法是利用 json() 方法解析,感覺下它們的不一樣

若是想獲取來自服務器的原始套接字響應,能夠取得 r.raw 。 不過須要在初始請求中設置 stream=True 。

這樣就獲取了網頁原始套接字內容。

若是想添加 headers,能夠傳 headers 參數

經過headers參數能夠增長請求頭中的headers信息

基本POST請求

對於 POST 請求來講,咱們通常須要爲它增長一些參數。那麼最基本的傳參方法能夠利用 data 這個參數。

運行結果

能夠看到參數傳成功了,而後服務器返回了咱們傳的數據。

有時候咱們須要傳送的信息不是表單形式的,須要咱們傳JSON格式的數據過去,因此咱們能夠用 json.dumps() 方法把表單數據序列化。

運行結果

經過上述方法,咱們能夠POST JSON格式的數據

若是想要上傳文件,那麼直接用 file 參數便可

新建一個 a.txt 的文件,內容寫上 Hello World!

能夠看到運行結果以下

這樣咱們便成功完成了一個文件的上傳。

requests 是支持流式上傳的,這容許你發送大的數據流或文件而無需先把它們讀入內存。要使用流式上傳,僅需爲你的請求體提供一個類文件對象便可

這是一個很是實用方便的功能。

Cookies

若是一個響應中包含了cookie,那麼咱們能夠利用 cookies 變量來拿到

以上程序僅是樣例,能夠用 cookies 變量來獲得站點的 cookies

另外能夠利用 cookies 變量來向服務器發送 cookies 信息

運行結果

能夠已經成功向服務器發送了 cookies

超時配置

能夠利用 timeout 變量來配置最大請求時間

注:timeout 僅對鏈接過程有效,與響應體的下載無關。

也就是說,這個時間只限制請求的時間。即便返回的 response 包含很大內容,下載須要必定時間,然而這並無什麼卵用。

會話對象

在以上的請求中,每次請求其實都至關於發起了一個新的請求。也就是至關於咱們每一個請求都用了不一樣的瀏覽器單獨打開的效果。也就是它並非指的一個會話,即便請求的是同一個網址。好比

結果是

很明顯,這不在一個會話中,沒法獲取 cookies,那麼在一些站點中,咱們須要保持一個持久的會話怎麼辦呢?就像用一個瀏覽器逛淘寶同樣,在不一樣的選項卡之間跳轉,這樣其實就是創建了一個長久會話。

解決方案以下

在這裏咱們請求了兩次,一次是設置 cookies,一次是得到 cookies

運行結果

發現能夠成功獲取到 cookies 了,這就是創建一個會話到做用。體會一下。

那麼既然會話是一個全局的變量,那麼咱們確定能夠用來全局的配置了。

經過 s.headers.update 方法設置了 headers 的變量。而後咱們又在請求中設置了一個 headers,那麼會出現什麼結果?

很簡單,兩個變量都傳送過去了。

運行結果

若是get方法傳的headers 一樣也是 x-test 呢?

嗯,它會覆蓋掉全局的配置

那若是不想要全局配置中的一個變量了呢?很簡單,設置爲 None 便可

運行結果

嗯,以上就是 session 會話的基本用法

SSL證書驗證

如今隨處可見 https 開頭的網站,Requests能夠爲HTTPS請求驗證SSL證書,就像web瀏覽器同樣。要想檢查某個主機的SSL證書,你可使用 verify 參數

如今 12306 證書不是無效的嘛,來測試一下

結果

果然如此

來試下 github 的

嗯,正常請求,內容我就不輸出了。

若是咱們想跳過剛纔 12306 的證書驗證,把 verify 設置爲 False 便可

發現就能夠正常請求了。在默認狀況下 verify 是 True,因此若是須要的話,須要手動設置下這個變量。

代理

若是須要使用代理,你能夠經過爲任意請求方法提供 proxies 參數來配置單個請求

也能夠經過環境變量 HTTP_PROXY 和 HTTPS_PROXY 來配置代理

經過以上方式,能夠方便地設置代理。

API

以上講解了 requests 中最經常使用的參數,若是須要用到更多,請參考官方文檔 API

API

結語

以上總結了一下 requests 的基本用法,若是你對爬蟲有了必定的基礎,那麼確定能夠很快上手,在此就很少贅述了。

練習纔是王道,你們儘快投注於實踐中吧。

轉載:靜覓 » Python爬蟲利器一之Requests庫的用法

相關文章
相關標籤/搜索