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