這幾天我初學Python的urllib庫,學學Python網絡爬蟲知識,結果學起來比我想象的難得多,比學習界面都難。
urllib是什么?
我們首先了解一下 Urllib 庫,它是 Python 內置的 HTTP 請求庫,也就是說我們不需要額外安裝即可使用,它包含四個模塊:- 第一個模塊 request,它是最基本的 HTTP 請求模塊,我們可以用它來模擬發送一請求,就像在瀏覽器里輸入網址然后敲擊回車一樣,只需要給庫方法傳入 URL 還有額外的參數,就可以模擬實現這個過程了。
- 第二個 error 模塊即異常處理模塊,如果出現請求錯誤,我們可以捕獲這些異常,然后進行重試或其他操作保證程序不會意外終止。
- 第三個 parse 模塊是一個工具模塊,提供了許多 URL 處理方法,比如拆分、解析、合並等等的方法。
第四個模塊是 robotparser,主要是用來識別網站的 robots.txt 文件,然后判斷哪些網站可以爬,哪些網站不可以爬的,其實用的比較少。
在這里重點對前三個模塊進行下講解。
作者:NewForMe
鏈接:https://www.jianshu.com/p/63dad93d7000
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
現在我來說一個怎么使用urllib庫爬取一個網頁的HTML代碼,可以輸出,也可以保存進一個文件
urllib.request 模塊提供了最基本的構造 HTTP 請求的方法,利用它可以模擬瀏覽器的一個請求發起過程,同時它還帶有處理authenticaton(授權驗證),redirections(重定向),cookies(瀏覽器Cookies)以及其它內容。
我們來感受一下它的強大之處,以 Python官網為例,我們來把這個網頁抓下來:
import urllib.request
response = urllib.request.urlopen('https://www.python.org')
print(response.read().decode('utf-8'))
運行結果
接下來我們看下它返回的到底是什么,利用 type() 方法輸出 Response 的類型。
import urllib.request
response = urllib.request.urlopen('https://www.python.org')
print(type(response))
輸出結果:
<class 'http.client.HTTPResponse'>
通過輸出結果可以發現它是一個 HTTPResposne 類型的對象,它主要包含的方法有 read()、readinto()、getheader(name)、getheaders()、fileno() 等方法和 msg、version、status、reason、debuglevel、closed 等屬性。
得到這個對象之后,我們把它賦值為 response 變量,然后就可以調用這些方法和屬性,得到返回結果的一系列信息了。
例如調用 read() 方法可以得到返回的網頁內容,調用 status 屬性就可以得到返回結果的狀態碼,如 200 代表請求成功,404 代表網頁未找到等。