當前位置:成語大全網 - 新華字典 - 基本庫的使用——urllib.urlopen

基本庫的使用——urllib.urlopen

urllib庫是python內置的HTTP請求庫,包含壹下4個模塊:

request :是最基本的HTTP請求模塊,可以用來模擬發送請求。

error :異常處理模塊,如果出現請求錯誤,可以捕獲異常,然後進行重試或其他操作以保證程序不會意外終止。

parse :壹個工具模塊,提供了許多URL處理方法,比如拆分、解析、合並等

robotparser :主要是用來識別網站的robots.txt文件,然後判斷哪些網站可以爬,哪些網站不可以爬,壹般用的比較少。

urllib.request模塊提供了最基本的構造HTTP請求的方法,利用它可以模擬瀏覽器的壹個請求發起內容。

以python官網為例:

輸出結果如下:

使用type()方法輸出響應類型:

輸出結果為:<class 'http.client.HTTPResponse'>

可以發現它是壹個HTTPResponse類型的對象,主要包含read()、readinto()、getheader(name)、getheaders()、fileno()等方法,以及msg、version、status、reason、debuglevel、closed等屬性。

例如:調用read()方法可以得到返回網頁的內容,調用status方法可以得到返回結果的狀態碼:

運行結果為:

urlopen函數的API:

data參數

data參數是可選的,如果使用,需要用bytes方法將參數轉化為字節流編碼,另外使用data後,請求方式就變成了POST方式

傳遞了壹個參數word,值是hello。它需要被轉碼成bytes(字節流)類型。使用了bytes()方法,該方法第壹個參數需要str類型,需要用urllib.parse模塊裏的urlencode()方法來將參數字典轉為字符串,第二個參數指定編碼格式。運行結果如下:

b'{\n "args": {}, \n "data": "", \n "files": {}, \n "form": {\n "word": "hello"\n }, \n "headers": {\n "Accept-Encoding": "identity", \n "Content-Length": "10", \n "Content-Type": "application/x-www-form-urlencoded", \n "Host": " httpbin.org ", \n "User-Agent": "Python-urllib/3.8", \n "X-Amzn-Trace-Id": "Root=1-60f81561-6376ab2566bb9e4525f0204e"\n }, \n "json": null, \n "origin": "111.164.173.185", \n "url": " http://httpbin.org/post "\n}\n'

timeout參數

timeout參數用於設置超時時間,單位為秒,意思是如果請求超出了設置的這個時間,還沒有得到響應,就拋出異常。

運行結果:URLError: <urlopen error timed out>

因此可以設置超時時間,控制壹個頁面若長時間無響應,就跳過抓取,使用try except語句實現。

輸出結果為TIME OUT。

其他參數:

context參數必須是ssl.SSLContext類型,用來指定SSL設置。

cafile和capth這兩個參數分別指定CA證書和它的路徑