Python技能樹共建之python?urllib?模塊
一、Python urllib 模塊是什么
urllib 模塊是 Python 標準庫,其價值在于抓取網(wǎng)絡(luò)上的 URL 資源,入門爬蟲時必學的一個模塊。
不過更多的爬蟲工程師上手學習的模塊已經(jīng)更換為 requests 了。
在 Python3 中 urllib 模塊包括如下內(nèi)容。
urllib.request:請求模塊,用于打開和讀取 URL;urllib.error:異常處理模塊,捕獲urllib.error拋出異常;urllib.parse:URL 解析,爬蟲程序中用于處理 URL 地址;urllib.robotparser:解析 robots.txt 文件,判斷目標站點哪些內(nèi)容可爬,哪些不可以爬,但是用的很少。
二、使用方法
上手案例
打開一個測試站點,然后返回服務(wù)器響應(yīng)內(nèi)容。
from urllib.request import urlopen
with urlopen('https://www.example.net') as html:
page = html.read()
print(page)上述代碼用到了 urllib.requests 模塊,其內(nèi)部定義了打開 URL 的函數(shù),授權(quán)驗證的方法,重定向,cookie 操作等方法。
代碼中用到的 urlopen() 函數(shù),就是打開一個 URL,該函數(shù)的語法格式如下所示:
urllib.request.urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT,
*, cafile=None, capath=None, cadefault=False, context=None)參數(shù)描述如下所示:
url:請求地址;data:發(fā)送到服務(wù)器的其他數(shù)據(jù)對象,默認為 None;timeout:超時時間;cafile和capath:cafile 為 CA 證書, capath 為 CA 證書的路徑,使用 HTTPS 需要用到;context:ssl.SSLContext 類型,用來指定 SSL 設(shè)置。
調(diào)用該對象的 read() 方法,可以讀取到整個網(wǎng)頁數(shù)據(jù)。
其余的函數(shù)與文件讀取類似,分別是 readline(),readlines()。
還可以調(diào)用對象的 getcode() 方法,獲取網(wǎng)頁狀態(tài)碼。
print(html.getcode()) # 返回 200
urlopen() 返回對象的更多方法
使用 urlopen() 可以得到一個 HTTPResposne 類型的對象,它包括上文提及的 read() 方法,getcode() 方法,除此之外,還有如下內(nèi)容可以使用。
getheaders():獲取請求頭內(nèi)容;getheader(name):獲取指定請求頭;msg:信息屬性;version:版本屬性;status:狀態(tài)屬性。
urllib.Request() 類
URL 請求抽象類,使用它可以擴展更多的請求配置,其構(gòu)造方法如下所示:
def __init__(self, url, data=None, headers={},
origin_req_host=None, unverifiable=False,
method=None)其參數(shù)說明如下所示:
url:請求地址,必選參數(shù);data:請求參數(shù),必須為bytes類型數(shù)據(jù),可以使用urlencode()進行編碼;headers:字典類型,請求頭設(shè)置;origin_req_host:請求的主機地址,IP 或域名;method:請求方法。
測試代碼如下所示:
from urllib import request, parse
url = 'http://httpbin.org/post'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) 你的UA'
}
dict = {
'name': 'xiangpica'
}
# 轉(zhuǎn)換數(shù)據(jù)類型
data = bytes(parse.urlencode(dict), encoding='utf8')
# 實例化對象
req = request.Request(url=url, data=data, headers=headers, method='POST')
# 添加請求頭
req.add_header('HOST', 'httpbin.org')
# 發(fā)送數(shù)據(jù)
response = request.urlopen(req)
print(response.read().decode('utf-8'))urllib.parse
該模塊主要用于解析 URL,函數(shù)原型如下所示:
urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)
參數(shù)說明如下:
urlstring:URL 地址;scheme:協(xié)議類型,可用的包括 file、ftp、gopher、hdl、http、https、imap、mailto、 mms、news、nntp、prospero、rsync、rtsp、rtspu、sftp、 sip、sips、snews、svn、svn+ssh、telnet……;allow_fragments:是否忽略 URL 中的fragment部分。
標準的 URL 格式如下:
scheme://netloc/path;params?query#fragment
說明如下所示:
scheme:URL 協(xié)議;netloc:域名和端口;path:路徑;params:最后一個路徑元素參數(shù),不常用;query:查詢字符串;fragment:片段標志。
from urllib.parse import urlparse
result = urlparse('http://www.example.com/index.html;info?id=10086#comment')
print(type(result), result)
print(result.scheme, result[0])
print(result.netloc, result[1])
print(result.path, result[2])
print(result.params, result[3])
print(result.query, result[4])
print(result.fragment, result[5])運行結(jié)果如下所示:
<class 'urllib.parse.ParseResult'> ParseResult(scheme='http', netloc='www.example.com', path='/index.html', params='info', query='id=10086', fragment='comment')
http http
www.example.com www.example.com
/index.html /index.html
info info
id=10086 id=10086
comment comment
urlparse() 返回結(jié)果是一個
ParseResult類型的對象。
其余內(nèi)容
urlunparse()方法與上述方法邏輯相反;urljoin()方法用于拼接鏈接;urlencode():格式化請求參數(shù);quote():將內(nèi)容轉(zhuǎn)換為 URL 編碼格式,尤其是轉(zhuǎn)換中文字符;unquote():對 URL 進行解碼。
三、提高場景
error 模塊
在 urllib 中,error 模塊定義異常,其包含如下類:
URLError:OSError 的一個子類,用于處理程序在遇到問題時會引發(fā)此異常;HTTPError:URLError 的一個子類,用于處理特殊 HTTP 錯誤例如作為認證請求的時候
到此這篇關(guān)于Python技能樹共建之python urllib 模塊的文章就介紹到這了,更多相關(guān) python urllib 模塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python如何運用pyaudio庫去做一個固定采樣率音頻錄制器
這篇文章主要介紹了Python如何運用pyaudio庫去做一個固定采樣率音頻錄制器問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-05-05
python multiprocessing模塊用法及原理介紹
這篇文章主要介紹了python multiprocessing模塊用法及原理介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-08-08

