python urllib安装_Python Urllib库
一、什么是Urllib
我們首先了解一下 Urllib 庫,它是 Python 內置的 HTTP 請求庫,也就是說我們不需要額外安裝即可使用,它包含四個模塊:第一個模塊 request,它是最基本的 HTTP 請求模塊,我們可以用它來模擬發送請求,就像在瀏覽器里輸入網址然后敲擊回車一樣,只需要給庫方法傳入 URL 還有額外的參數,就可以模擬實現這個過程了。
第二個 error 模塊,即異常處理模塊,如果出現請求錯誤,我們可以捕獲這些異常,然后進行重試或其他操作,保證程序不會意外終止。
第三個 parse 模塊是一個工具模塊,提供了許多 URL 處理方法,比如拆分、解析、合并等的方法。
第四個模塊是 robotparser,主要是用來識別網站的 robots.txt 文件,然后判斷哪些網站可以爬,哪些網站不可以爬的,其實用的比較少。
在這里重點對前三個模塊進行下講解。
二、發送請求
使用 Urllib 的 request 模塊我們可以方便地實現 Request 的發送并得到 Responseurlopen()
urllib.request模塊提供了最基本的構造 HTTP 請求的方法,利用它可以模擬瀏覽器的一個請求發起過程,同時它還帶有處理authenticaton(授權驗證),redirections(重定向)cookies(瀏覽器Cookies)以及其它內容。
我們來感受一下它的強大之處,以 百度首頁為例,我們來把這個網頁抓下來:
1.發送請求(以GET方式)
2.response
通過輸出結果可以發現它是一個 HTTPResposne 類型的對象,它主要包含的方法有 read()、readinto()、getheader(name)、getheaders()、fileno() 等方法和 msg、version、status、reason、debuglevel、closed 等屬性。
得到這個對象之后,我們把它賦值為 response 變量,然后就可以調用這些方法和屬性,得到返回結果的一系列信息了。
例如調用 read() 方法可以得到返回的網頁內容,調用 status 屬性就可以得到返回結果的狀態碼,如 200 代表請求成功,404 代表網頁未找到等。
可見,三個輸出分別輸出了響應的狀態碼,響應的頭信息,以及通過調用 getheader() 方法并傳遞一個參數 Server 獲取了 headers 中的 Server 值,結果是 nginx,意思就是服務器是 nginx 搭建的。 利用以上最基本的 urlopen() 方法,我們可以完成最基本的簡單網頁的 GET 請求抓取。 如果我們想給鏈接傳遞一些參數該怎么實現呢?我們首先看一下 urlopen() 函數的API:
可以發現除了第一個參數可以傳遞 URL 之外,我們還可以傳遞其它的內容,比如 data(附加數據)、timeout(超時時間)等等。
下面我們詳細說明下這幾個參數的用法:data參數
data 參數是可選的,如果要添加 data,它要是字節流編碼格式的內容,即 bytes 類型,通過 bytes() 方法可以進行轉化,另外如果傳遞了這個 data 參數,它的請求方式就不再是 GET 方式請求,而是 POST。
在這里我們傳遞了一個參數 word,值是 hello,它需要被轉碼成bytes(字節流)類型。其中轉字節流采用了 bytes() 方法,第一個參數需要是 str(字符串)類型,需要用 urllib.parse 模塊里的 urlencode() 方法來將參數字典轉化為字符串,第二個參數指定編碼格式,在這里指定為 utf8。最后通過read()方法獲取響應體的內容。參數timeout(超時)的設置
timeout 參數可以設置超時時間,單位為秒,意思就是如果請求超出了設置的這個時間還沒有得到響應,就會拋出異常,如果不指定,就會使用全局默認時間。它支持 HTTP、HTTPS、FTP 請求。 因此我們可以通過設置這個超時時間來控制一個網頁如果長時間未響應就跳過它的抓取,利用 try except 語句就可以實現這樣的操作,代碼如下:
其他參數
還有 context 參數,它必須是 ssl.SSLContext 類型,用來指定 SSL 設置。
cafile 和 capath 兩個參數是指定 CA 證書和它的路徑,這個在請求 HTTPS 鏈接時會有用。
cadefault 參數現在已經棄用了,默認為 False。
以上講解了 urlopen() 方法的用法,通過這個最基本的函數可以完成簡單的請求和網頁抓取,如需更加詳細了解,可以參見官方文檔:https://docs.python.org/3/library/urllib.request.html
3.Request
由上我們知道利用 urlopen() 方法可以實現最基本請求的發起,但這幾個簡單的參數并不足以構建一個完整的請求,如果請求中需要加入 Headers 等信息,我們就可以利用更強大的 Request 類來構建一個請求。
首先我們用一個實例來感受一下 Request 的用法:
可以發現,我們依然是用 urlopen() 方法來發送這個請求,只不過這次 urlopen() 方法的參數不再是一個 URL,而是一個 Request 類型的對象,通過構造這個數據結構,一方面我們可以將請求獨立成一個對象,另一方面可配置參數更加豐富和靈活。
下面我們看一下 Request 都可以通過怎樣的參數來構造,它的構造方法如下:
第一個 url 參數是請求 URL,這個是必傳參數,其他的都是可選參數。
第二個 data 參數如果要傳必須傳 bytes(字節流)類型的,如果是一個字典,可以先用 urllib.parse 模塊里的 urlencode() 編碼。
第三個 headers 參數是一個字典,這個就是 Request Headers 了,你可以在構造 Request 時通過 headers 參數直接構造,也可以通過調用 Request 實例的 add_header() 方法來添加, Request Headers 最常用的用法就是通過修改 User-Agent 來偽裝瀏覽器,默認的 User-Agent 是 Python-urllib,我們可以通過修改它來偽裝瀏覽器。
第四個 origin_req_host 參數指的是請求方的 host 名稱或者 IP 地址。
第五個 unverifiable 參數指的是這個請求是否是無法驗證的,默認是False。意思就是說用戶沒有足夠權限來選擇接收這個請求的結果。例如我們請求一個 HTML 文檔中的圖片,但是我們沒有自動抓取圖像的權限,這時 unverifiable 的值就是 True。
第六個 method 參數是一個字符串,它用來指示請求使用的方法,比如GET,POST,PUT等等。
寫個例子:
在這里我們通過四個參數構造了一個 Request,url 即請求 URL,在headers 中指定了 User-Agent 和 Host,傳遞的參數 data 用了 urlencode() 和 bytes() 方法來轉成字節流,另外指定了請求方式為 POST。
通過觀察結果可以發現,我們成功設置了 data,headers 以及 method。
另外 headers 也可以用 add_header() 方法來添加。
這樣,我們就可以更加方便地構造一個 Request,實現請求的發送啦。
總結
以上是生活随笔為你收集整理的python urllib安装_Python Urllib库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python为text添加滚动条_Pyt
- 下一篇: 索尼 LinkBuds S / WF-1