天天看點

第61天:Requests的進階用法

by 閑歡

上一篇我們介紹了 Requests 庫的基本用法,學會之後大家就可以應付一般的請求了。這一篇我們接着介紹 Requests 的進階用法,以便應付一些棘手的問題。

在 requests 中,直接使用 get() 或 post() 方法确實可以做到模拟網頁的請求,但是這實際上是兩個不同的會話,相當于用了兩個浏覽器打開不同的頁面,而這兩個頁面是不共享 cookies 的。會話維持相當于打在原來的浏覽器上新開了一個頁面,這樣就不用每次去設定 cookies 了——這就是Session對象。

這裡我們請求了一個測試網站,設定了一個 Cookie ,名稱為 num ,内容為123456,之後又發起了請求,擷取Cookies,結果并沒有取到第一次請求的 Cookie。

試想一種常見的場景:我登入一個網站之後,點選裡面某個功能的時候,是不需要再登入的,為什麼?因為登入操作之後,浏覽器與伺服器之間就建立了一個 Session ,我在同一浏覽器再次請求伺服器的時候,共用的是這一個 Session ,是以不用再次登入。那麼如果我使用代碼去請求呢?按照上面的例子,我請求兩次并不會共享 Session,那就沒法實作這個場景功能。而 Requests 的會話可以實作這種場景功能。

我們再來看個例子:

這個例子中,我們使用 Session 對象請求,第一次請求設定的 Cookie ,在第二次請求中我們仍然可以擷取到,說明兩次請求在同一個 Session 中。

在通路網站時,我們經常會遇到需要身份認證的頁面,需要輸入使用者名和密碼才能登入網站。這個時候我們可以使用 Requests 自帶的身份認證功能。

如果使用者名和密碼都正确的話,就會成功,傳回200狀态碼。否則傳回401狀态碼。

現在随處可見 https 開頭的網站,Requests 可以為 HTTPS 請求驗證 SSL 證書,就像 web 浏覽器一樣。要想檢查某個主機的 SSL 證書,你可以使用 verify 參數:

如果想檢查驗證某個主機的 SSL 證書,就将 verify 設定為 True ,如果證書無效,就會報 requests.exceptions.SSLError 的錯誤。如果想跳過檢查,就将 verify 參數設定為 False。 verify 參數預設是 True ,是以如果需要的話,需要手動設定下這個變量。

對于某些網站,如果請求幾次,或許能正常擷取内容。一旦開始爬取,對于大規模的頻繁請求,網站可能會彈出驗證碼,或者跳轉到登陸認證,或者封禁IP,導緻一定時間内無法通路。此時,就需要設定代理還解決這個問題,就要用到 proxies 參數。

這裡的兩個位址都是編的,僅做示例用。如果你想跑起來的話需要換成有效代理。

除了基本的 HTTP 代理,Request 還支援 SOCKS 協定的代理。這是一個可選功能,若要使用, 你需要安裝第三方庫。你可以用 pip 擷取依賴:

安裝好依賴以後,使用 SOCKS 代理和使用 HTTP 代理一樣簡單:

在 Rquests 的基本用法中,我們介紹了逾時的用法,通過使用 timeout 參數來配置。例如:

我們知道,一個 HTTP 請求會有 connect 和 read 兩部分時間,上面的例子中設定的是二者加起來的逾時時間。如果要分别制定,我們需要傳入一個元組:

如果遠端伺服器很慢,如果你想要 Request 一直等待伺服器傳回,那麼可以給 timeout 指派 None :

本文為大家講述了幾個 Requests 的進階特性,通過掌握這些特性,我們就基本上掌握了 Requests 的常用功能,也可以運用 Requests 去解決實際問題了。我們的 Requests 介紹也就告一段落了,剩下的靠大家去實踐出真知了。

文中示例代碼:python-100-days

關注公衆号:python技術,回複"python"一起學習交流

第61天:Requests的進階用法

作者:純潔的微笑

出處:www.ityouknow.com

資源:微信搜【純潔的微笑】關注我,回複 【程式員】【面試】【架構師】有我準備的一線程式必備計算機書籍、大廠面試資料和免費電子書。 一共1024G的資料,希望可以幫助大家提升技術和能力。

本文如對您有幫助,還請多幫 【推薦】 下此文。

點我了解:Tooool-程式員一站式導航網站