您好,登錄后才能下訂單哦!
這篇文章主要介紹了Python的urllib模塊怎么用的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇Python的urllib模塊怎么用文章都會有所收獲,下面我們一起來看看吧。
urllib
模塊是 Python 標準庫,其價值在于抓取網絡上的 URL 資源,入門爬蟲時必學的一個模塊。
不過更多的爬蟲工程師上手學習的模塊已經更換為 requests 了。
在 Python3 中 urllib 模塊包括如下內容。
urllib.request
:請求模塊,用于打開和讀取 URL;
urllib.error
:異常處理模塊,捕獲 urllib.error
拋出異常;
urllib.parse
:URL 解析,爬蟲程序中用于處理 URL 地址;
urllib.robotparser
:解析 robots.txt 文件,判斷目標站點哪些內容可爬,哪些不可以爬,但是用的很少。
打開一個測試站點,然后返回服務器響應內容。
from urllib.request import urlopen with urlopen('https://www.example.net') as html: page = html.read() print(page)
上述代碼用到了 urllib.requests
模塊,其內部定義了打開 URL 的函數,授權驗證的方法,重定向,cookie 操作等方法。
代碼中用到的 urlopen()
函數,就是打開一個 URL,該函數的語法格式如下所示:
urllib.request.urlopen(url, data=None, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, *, cafile=None, capath=None, cadefault=False, context=None)
參數描述如下所示:
url
:請求地址;
data
:發送到服務器的其他數據對象,默認為 None;
timeout
:超時時間;
cafile
和 capath
:cafile 為 CA 證書, capath 為 CA 證書的路徑,使用 HTTPS 需要用到;
context
:ssl.SSLContext 類型,用來指定 SSL 設置。
調用該對象的 read()
方法,可以讀取到整個網頁數據。
其余的函數與文件讀取類似,分別是 readline()
,readlines()
。
還可以調用對象的 getcode()
方法,獲取網頁狀態碼。
print(html.getcode()) # 返回 200
使用 urlopen()
可以得到一個 HTTPResposne
類型的對象,它包括上文提及的 read()
方法,getcode()
方法,除此之外,還有如下內容可以使用。
getheaders()
:獲取請求頭內容;
getheader(name)
:獲取指定請求頭;
msg
:信息屬性;
version
:版本屬性;
status
:狀態屬性。
URL 請求抽象類,使用它可以擴展更多的請求配置,其構造方法如下所示:
def __init__(self, url, data=None, headers={}, origin_req_host=None, unverifiable=False, method=None)
其參數說明如下所示:
url
:請求地址,必選參數;
data
:請求參數,必須為 bytes
類型數據,可以使用 urlencode()
進行編碼;
headers
:字典類型,請求頭設置;
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' } # 轉換數據類型 data = bytes(parse.urlencode(dict), encoding='utf8') # 實例化對象 req = request.Request(url=url, data=data, headers=headers, method='POST') # 添加請求頭 req.add_header('HOST', 'httpbin.org') # 發送數據 response = request.urlopen(req) print(response.read().decode('utf-8'))
該模塊主要用于解析 URL,函數原型如下所示:
urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)
參數說明如下:
urlstring
:URL 地址;
scheme
:協議類型,可用的包括 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 協議;
netloc
:域名和端口;
path
:路徑;
params
:最后一個路徑元素參數,不常用;
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])
運行結果如下所示:
<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() 返回結果是一個
ParseResult
類型的對象。
其余內容
urlunparse()
方法與上述方法邏輯相反;
urljoin()
方法用于拼接鏈接;
urlencode()
:格式化請求參數;
quote()
:將內容轉換為 URL 編碼格式,尤其是轉換中文字符;
unquote()
:對 URL 進行解碼。
在 urllib
中,error
模塊定義異常,其包含如下類:
URLError
:OSError 的一個子類,用于處理程序在遇到問題時會引發此異常;
HTTPError
:URLError 的一個子類,用于處理特殊 HTTP 錯誤例如作為認證請求的時候
關于“Python的urllib模塊怎么用”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“Python的urllib模塊怎么用”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。