對url編解碼總結
import urllib.parse
# Python3 url編碼
print(urllib.parse.quote("天天"))
# Python3 url解碼
print(urllib.parse.unquote("%E5%A4%E5%A4%"))
urlparse()
# urllib.parse.urlparse(urlstring,scheme='',allow_fragments=True)
# urlstring : 這個是必填項,即待解析的URL
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
print(type(result),result)
# scheme : 它是預設的協定,隻有在URL中不包含scheme資訊時生效
result = urlparse('www.baidu.com/index.html;user?id=5#comment',scheme='https')
print(result)
# allow_fragments : 即是否忽略fragment 設定成False就會忽略,它會被解析為path,parameters或者query的一部分,而fragment部分為空
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment',allow_fragments=False)
print(result)
# 傳回的結果其實是一個元組,我們可以通過索引來擷取,也可以用屬性名來擷取
# ParseResult的屬性 scheme(:// 協定),netloc(/ 域名),path(通路路徑),params(; 參數),query(查詢條件),fragment(# 錨點)
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment',allow_fragments=False)
print(result.scheme,result[0],result.netloc,result[1],sep='\n')
urlunparse()
# urlunparse() 長度必須為6個參數,否則會抛出參數數量不足或者過多的問題
data = ['http','www.baidu.com','index.html','user','a=6','comment']
print(urlunparse(data))
urlsplit()
# urlsplit() 和urlparse()方法很相似,不再解析params 參數
result = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')
print(result)
# 傳回的結果其實也是一個元組,我們可以通過索引來擷取,也可以用屬性名來擷取
# SplitResult的屬性 scheme(:// 協定),netloc(/ 域名),path(通路路徑),query(查詢條件),fragment(# 錨點)
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment',allow_fragments=False)
print(result.scheme,result[0])
urlunsplit()
# urlunsplit() 和urlunparse()方法很相似,隻不過長度變成5個參數
data = ['http','www.baidu.com','index.html','a=6','comment']
print(urlunsplit(data))
urljoin()
# urljoin() 也是合并連結的一種方式,相比之前倆種方法,沒有之前特定的指定參數對象的長度
# urljoin()方法提供倆個參數,base_url(基礎連結)作為第一個參數,講新的連結作為第二個參數,該方法會分析base_url的scheme,netloc和path
# 這三個内容并對新連結确實的部分進行補充,最後傳回結果
print(urljoin('http://www.baidu.com','https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html','https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com','FAQ.html'))
print(urljoin('http://www.baidu.com/about.html','https://cuiqingcai.com/FAQ.html?question=2'))
print(urljoin('http://www.baidu.com?wd=abc','https://cuiqingcai.com/index.php'))
print(urljoin('http://www.baidu.com','?category=2#comment'))
print(urljoin('www.baidu.com','?category=2#comment'))
print(urljoin('www.baidu.com#comment','?category=2'))
urlencode()
# urlencode() 序列化字典類型轉換為請求類型
params = {
'name' : 'germey',
'age' : 22
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(params)
print(url)
parse_qs()
# parse_qs() 反序列化将請求參數轉回字典參數
from urllib.parse import parse_qs
query = 'name=germey&age=22'
params = parse_qs(query)
print(params)
parse_qs1()
# parse_qs1() 它用于把參數轉化為元組組成的清單
from urllib.parse import parse_qsl
query = 'name=germey&age=22'
params = parse_qsl(query)
print(params)
quote()
# quote() 該方法可以将内容轉化為URL編碼的格式,URL中帶有中文參數時,又是可能會導緻亂碼的問題,用這個方法可以将中文字元轉化為URL編碼
from urllib.parse import quote
keyword = '桌面'
url = 'http://www.baidu.coms?wd='+quote(keyword)
print(url)
unquote()
# unquote() 它對應上面的方法, 可以進行URL解碼
from urllib.parse import unquote
url = 'http://www.baidu.coms?wd=%E5%A3%81%E7%BA%B8'
print(unquote(url))