洗禮靈魂,修鍊python(58)--爬蟲篇—【轉載】urllib3模組,pythonurllib3

來源:互聯網
上載者:User

洗禮靈魂,修鍊python(58)--爬蟲篇—【轉載】urllib3模組,pythonurllib3
urllib31.簡介

urllib3相比urllib,urlib2,又有些一些新的功能,可以實現很多東西,而這個模組有點特殊的是,並且還可以同時存在於python2和python3,但說實話,用的真的很少的。

2.方法/屬性

3.常用方法/屬性解析

由於用的很少,所以相關資料也很少,我反正是很少用,要嘛就用urllib,urlib2,要嘛直接用python3裡的urllib包,或者直接用第三方模組requests。說到requests,就是由於有requests,urllib3用的才少,因為urlib3裡有的功能,requests基本都有,urllib3功能還是挺實用的,不過用的真的不是很多。但是urllib3模組的用法還是講著走的對吧,慶幸的是,我發現部落格園裡居然有大佬更過urllib3模組的博文,那麼我就直接轉載這大佬的了,感興趣的可以看下,講得很不錯。

作者:Victor    原文連結:傳送門(如果原作者有任何異議,請聯絡我立即刪除)詳細內容:

 Urllib3是一個功能強大,條理清晰,用於HTTP用戶端的Python庫,許多Python的原生系統已經開始使用urllib3。Urllib3提供了很多python標準庫裡所沒有的重要特性:

               1、 安全執行緒

          2、 串連池

          3、 用戶端SSL/TLS驗證

          4、 檔案分部編碼上傳

          5、 協助處理重複請求和HTTP重定位

          6、 支援壓縮編碼

          7、 支援HTTP和SOCKS代理

          8、 100%測試覆蓋率

   Urllib3功能非常強大,但是用起來卻十分簡單:

          

安裝:

  Urllib3 能通過pip來安裝:

         $pip install urllib3

  你也可以在github上下載最新的源碼,解壓之後進行安裝:

         $git clone git://github.com/shazow/urllib3.git

         $python setup.py install

urllib3的使用:

   產生請求(request):

   首先,你必須匯入urllib3模組:

         

   然後你需要一個PoolManager執行個體來產生請求,由該執行個體對象處理與線程池的串連以及安全執行緒的所有細節,不需要任何人為操作:

          

   通過request()方法建立一個請求:

          

   request()方法返回一個HTTPResponse對象。

   你還可以通過request()方法向請求(request)中添加一些其他資訊,如:

          

   請求(request)中的資料項目(request data)可包括:

   Headers:

   在request()方法中,可以定義一個字典類型(dictionary),並作為headers參數傳入:

          

   Query parameters:

   對於GET、HEAD和DELETE請求,可以簡單的通過定義一個字典類型作為fields參數傳入即可:

          

   對於POST和PUT請求(request),需要手動對傳入資料進行編碼,然後加在URL之後:

          

   Form data:

   對於PUT和POST請求(request),urllib3會自動將字典類型的field參數編碼成表格類型.

   JSON:

   在發起請求時,可以通過定義body 參數並定義headers的Content-Type參數來發送一個已經過編譯的JSON資料:

          

   Files & binary data:

   使用multipart/form-data編碼方式上傳檔案,可以使用和傳入Form data資料一樣的方法進行,並將檔案定義為一個元組的形式     (file_name,file_data):

          

   檔案名稱(filename)的定義不是嚴格要求的,但是推薦使用,以使得表現得更像瀏覽器。同時,還可以向元組中再增加一個資料來定義檔案的 MIME類型:

          

   如果是發送原始位元據,只要將其定義為body參數即可。同時,建議對header的Content-Type參數進行設定:

          

   Timeout :

   使用timeout,可以控制請求的已耗用時間。在一些簡單的應用中,可以將timeout參數設定為一個浮點數:

          

   要進行更精細的控制,可以使用Timeout執行個體,將串連的timeout和讀的timeout分開設定:

          

   如果想讓所有的request都遵循一個timeout,可以將timeout參數定義在PoolManager中:

          

   或者

          

   當在具體的request中再次定義timeout時,會覆蓋PoolManager層面上的timeout。

   請求重試(retrying requests):

   Urllib3 可以自動重試等冪請求,原理和handles redirect一樣。可以通過設定retries參數對重試進行控制。Urllib3預設進行3次請求重  試,並進行3次方向改變。

   給retries參數定義一個整型來改變請求重試的次數:

          

   關閉請求重試(retrying request)及重新導向(redirect)只要將retries定義為False即可:

          

   關閉重新導向(redirect)但保持重試(retrying request),將redirect參數定義為False即可:

          

   要進行更精細的控制,可以使用retry執行個體,通過該執行個體可以對請求的重試進行更精細的控制。

   例如,進行3次請求重試,但是只進行2次重新導向:

          

   如果想讓所有請求都遵循一個retry策略,可以在PoolManager中定義retry參數:

          

   或者

         

   當在具體的request中再次定義retry時,會覆蓋 PoolManager層面上的retry。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.