Python個人學習筆記 urllib庫
發(fā)送請求
拆分/合并URL
編碼/解碼URL

發(fā)送請求
⑴ 發(fā)送GET請求?urllib.request.urlopen(url ,data=None [,timeout])
返回一個http.client.HTTPResponse對象。
參數(shù)timeout:用于設(shè)置超時時間,單位為秒。請求未在時限內(nèi)完成會拋出超時異常urllib.error.URLError: <urlopen error timed out>。
http.client.HTTPResponse對象的常用屬性/方法
????status:表示HTTP響應(yīng)的狀態(tài)碼。200表示成功,404表示Not Found等。
????reason:表示與HTTP狀態(tài)碼相對應(yīng)的原因短語。提供有關(guān)狀態(tài)碼的簡短描述,例如"OK"、"Not Found"等。
????headers:表示HTTP響應(yīng)的頭部信息。它是一個類似字典的對象,包含響應(yīng)頭部字段的名稱和值。
????version:表示HTTP協(xié)議的版本。
????getheader(name, default=None):獲取指定名稱的響應(yīng)頭字段的值。如果該字段不存在,則返回指定的默認值。
????getheaders():獲取所有響應(yīng)頭字段的名稱和值。返回一個列表,每個元素是一個包含字段名稱和值的元組。
????read([size]):讀取HTTP響應(yīng)的內(nèi)容(HTML代碼)。返回一個字節(jié)串??蛇x參數(shù)size指定要讀取的字節(jié)數(shù)。如果沒有指定size,則讀取所有的響應(yīng)內(nèi)容。
⑵ 發(fā)送POST請求?urllib.request.urlopen(url ,data [,timeout])
參數(shù)data:要發(fā)送的數(shù)據(jù)。默認為None。如果提供了數(shù)據(jù),則請求將變?yōu)镻OST請求,并將數(shù)據(jù)作為請求主體發(fā)送到服務(wù)器。data參數(shù)應(yīng)該是一個字節(jié)流(bytes)。
可以用來登錄帳號密碼,但是現(xiàn)在登錄基本都要驗證碼,不好辦。
⑶ 偽裝成瀏覽器?urllib.request.Request(url [,data=None] ,headers)
模擬瀏覽器發(fā)送網(wǎng)絡(luò)請求,可避開反爬措施。

拆分/合并URL
⑴?urllib.parse.urlparse()
urllib.parse.urlparse(urlstring, scheme='', allow_fragments=True)
參數(shù):
????urlstring:URL。
????scheme:默認協(xié)議。
????allow_fragments:是否解析片段標識符。默認為True。
返回一個六元組(scheme,netloc,path,params,query,fragment)。
????scheme:協(xié)議。
????netloc:域名。
????path:路徑。域名之后/隔開的部分。
????params:附加參數(shù)。;隔開的一系列鍵值對。
????query:查詢條件。?之后的部分,&隔開的一系列鍵值對。
????fragment:片段標識符。#之后的部分。加載頁面時會自動跳轉(zhuǎn)到片段標識符指定部分。若allow_fragments為False,則fragment部分會被加到上一個非空部分中。
⑵?urllib.parse.urlunparse()
urllib.parse.urlparse()的反函數(shù)。將有六個元素的可迭代對象合并成URL。成分順序必須對應(yīng)。
⑶?urllib.parse.urlsplit()
與urllib.parse.urlparse()類似,但不解析params部分,返回一個五元組。
⑷?urllib.parse.urlunparse()
urllib.parse.urlparse()的反函數(shù)。
⑸ urllib.parse.urljoin()
urllib.parse.urljoin(base,url)
將URL碎片拼接為完整URL。
base和url拼接時,base中不完整的部分會被覆蓋。

編碼/解碼URL
⑴?urllib.parse.quote()
將非英文字符編碼為URL中表示的形式。空格會被編譯為%20。
⑵?urllib.parse.urlencode()
將非英文字符編碼為URL中表示的形式。空格會被編譯為加號+。
參數(shù)為字典,會自動以=連接鍵值對。
⑶?urllib.parse.unquote()
urllib.parse.quote()和urllib.parse.urlencode()的反函數(shù)。
解碼urllib.parse.urlencode()生成的碼時,需要把+替換成%20。
⑷?urllib.parse.parse_qs() /?urllib.parse.parse_qsl()
解碼query部分,并返回一個字典 / 元組列表。
