python的urllib.parse用法
阿新 • • 發佈:2018-12-09
urllib.parse解析
url:urllib.parse.urlparse(url, scheme='', allow_fragments=True)
簡單的使用:
urlparse
from urllib import request, parse2 #解析url
print(parse.urlparse('https://movie.douban.com/'))
print(parse.urlparse('https://movie.douban.com/', scheme='http'))
print(parse.urlparse('movie.douban.com /', scheme='http'))
# 下面是結果
ParseResult(scheme='https', netloc='movie.douban.com', path='/', params='', query='', fragment='')
ParseResult(scheme='https', netloc='movie.douban.com', path='/', params='', query='', fragment='')
ParseResult(scheme='http', netloc='', path='movie.douban.com/', params='', query ='', fragment='')
可以看出加了scheme引數和沒加的返回結果是有區別的。而當scheme協議加了,而前面的url也包含協議,一般會忽略後面的scheme引數
既然有解析url,那當然也有反解析url,就是把元素串連成一個url
from urllib import parse
# 將列表元素拼接成url
url = ['http', 'www', 'baidu', 'com', 'dfdf', 'eddffa'] # 這裡至少需要6個元素
print(parse.urlunparse(url))
# 下面是結果6http://www/baidu;com?dfdf#eddffa
urlunparse()接收一個列表的引數,而且列表的長度是有要求的,是必須六個引數以上,要不會丟擲異常
urllib.parse.urljoin():這個是將第二個引數的url缺少的部分用第一個引數的url補齊
# 連線兩個引數的url, 將第二個引數中缺的部分用第一個引數的補齊,如果第二個有完整的路徑,則以第二個為主
print(parse.urljoin('https://movie.douban.com/', 'index'))
print(parse.urljoin('https://movie.douban.com/', 'https://accounts.douban.com/login'))
# 下面是結果
https://movie.douban.com/index6 https://accounts.douban.com/login
urlencode
urllib庫裡面有個urlencode函式,可以把key-value這樣的鍵值對轉換成我們想要的格式,返回的是a=1&b=2這樣的字串,比如:
>>> from urllib import urlencode
>>> data = {
... 'a': 'test',
... 'name': '魔獸'
... }
>>> print urlencode(data)
a=test&name=%C4%A7%CA%DE
如果只想對一個字串進行urlencode轉換,怎麼辦?urllib提供另外一個函式:quote()
>>> from urllib import quote
>>> quote('魔獸')
'%C4%A7%CA%DE'
urldecode
當urlencode之後的字串傳遞過來之後,接受完畢就要解碼了——urldecode。urllib提供了unquote()這個函式,可沒有urldecode()!
>>> from urllib import unquote
>>> unquote('%C4%A7%CA%DE')
'\xc4\xa7\xca\xde'
>>> print unquote('%C4%A7%CA%DE')
魔獸