1. 程式人生 > >python的urllib.parse用法

python的urllib.parse用法

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')
魔獸