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證書和它的路徑