很多小伙伴們在了解了爬蟲的一個基礎(chǔ)開發(fā)流程后大概有了一定的思路,想要實(shí)際上手的時候卻發(fā)現(xiàn)想要獲取網(wǎng)頁都是一件困難的事情。因?yàn)樵趯W(xué)習(xí)了 python 語言的標(biāo)準(zhǔn)課程中并沒有介紹 python 如何訪問網(wǎng)頁,也沒有介紹哪個庫的功能是做這個的(大部分編程語言類課程不會過多介紹這個語言的包,除非這個包是學(xué)習(xí)必須的)。其實(shí),在 python 中內(nèi)置了一個模塊專門用于操作網(wǎng)頁 URL,以及對網(wǎng)頁的內(nèi)容進(jìn)行一個簡單的處理,這個模塊,叫 urllib 庫。
介紹
urllib 庫是一個 python 自帶的用于操作網(wǎng)頁 URL 的庫,它可以簡單的對網(wǎng)頁的內(nèi)容進(jìn)行抓取處理。該功能最常用于 python 爬蟲的開發(fā),不過對于爬蟲開發(fā)而言,request 是一個更好的選擇。但內(nèi)置的 urllib 也可以在簡單使用上替代 request 庫(而且由于 urllib 庫是內(nèi)置的,所以并不需要額外安裝)。
安裝
urllib 是 python 內(nèi)置的庫,不需要額外的安裝。
功能
urllib 庫下有四個模塊,分別是 request 模塊,error 模塊,parse 模塊和 robotparser 模塊。
- ?
urllib.request
? 該模塊定義了一些打開URL的函數(shù)和類,比如發(fā)起請求,授權(quán)驗(yàn)證,重定向,cookie等功能。
urllib.request
?的?urlopen()
?方法即可。?urlopen()
? 方法可以選擇傳入如下參數(shù)(不完全,但是基本上是爬蟲常用的參數(shù)):? url
?:url 地址,也就是請求的鏈接。? data
?:發(fā)送到服務(wù)器的數(shù)據(jù)包(使用post方法的時候),默認(rèn)為None。? timeout
?:設(shè)置訪問超時時間。? headers
?:請求頭,這個字段在爬蟲反反爬的時候需要用到。? method
?:請求方法,可以設(shè)置請求的方式,默認(rèn)是get請求。
代碼示例:
url = 'http://m.hgci.cn/'
headers = {
#假裝自己是瀏覽器
'User-Agent':' Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36',
}
req = request.Request(url,data=None,headers=headers,method='GET')
- ?
urllib.error
? 該模塊為?urllib.request
?所引發(fā)的異常定義了異常類,用于處理?urllib.request
?引起的異常。
- ?
urllib.parse
? 該模塊用于解析URL ,它可以解析一個url的協(xié)議,網(wǎng)絡(luò)位置部分,分層路徑,最后路徑元素的參數(shù),查詢組件,片段識別,用戶名,密碼,主機(jī)名(小寫)和端口號(前提是該URL有對應(yīng)的值)
一般而言一個url的結(jié)構(gòu)只要開發(fā)者有一定經(jīng)驗(yàn),可以直接看出上述的內(nèi)容,所以該模塊的作用只是用于自動化操作,對于爬蟲而言作用有限(在最開始的網(wǎng)站分析階段開發(fā)者已經(jīng)將相應(yīng)的工作都做完了),如需了解對應(yīng)的內(nèi)容,請前往python教程進(jìn)行了解
urllib.robotparser
? 該模塊用于解析robot文件。robot文件是網(wǎng)站用來告訴爬蟲什么內(nèi)容可以爬什么內(nèi)容不能爬的文件,是網(wǎng)站與爬蟲開發(fā)者之間的君子協(xié)定。雖然沒有明文規(guī)定robot規(guī)定不能爬的內(nèi)容一定不能爬,但是爬取robot規(guī)定不能爬的內(nèi)容對方可以向開發(fā)者?追責(zé)。?
小結(jié)
以上就是關(guān)于 urllib 庫的全部內(nèi)容介紹了,關(guān)于這個庫的類和方法的內(nèi)容還有很多,小編只是挑了里面比較常用的一個功能進(jìn)行介紹,更多的內(nèi)容可以翻閱官方文檔。W3Cschool后續(xù)也會整理相關(guān)的手冊進(jìn)行放出。