python.urllib库之parse

import urllib.parse

url = 'http://www.baidu.com/index.html;abc?m=1&n=xyz#opq'
# urlparse(url, scheme='', allow_fragments=True)
# 默认参数sheme:若网址没有写协议,则使用sheme中指定的协议
# 默认参数allow_fragments:是否忽略fragment即锚点,若忽略(False),则结果里fragment=''
res = urllib.parse.urlparse(url)
print(res)
# 结果:ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='abc', query='m=1&n=xyz', fragment='opq')
# res为元组类型,元素的数量和位置是固定的,可直接通过元素索引或者元素名访问res内部元素
print(res[0], res.scheme)
# 结果:http http

res = urllib.parse.urlsplit(url)
# urlsplit结果没有params元素,params元素被放在netloc元素一起
print(res)
# 结果:SplitResult(scheme='http', netloc='www.baidu.com', path='/index.html;abc', query='m=1&n=xyz', fragment='opq')

# 将各部分组合成标准url,参数格式为可迭代对象如列表、元组
# urlunparse的参数长度为6,urlunsplite参数长度为5
unparse = ('http', 'www.baidu.com', 'index.html', 'abc', 'm=1&n=xyz', 'opq')
new_url = urllib.parse.urlunparse(unparse)
print(new_url == url) # True

unsplit = ['http', 'www.baidu.com', 'index.html;abc', 'm=1&n=xyz', 'opq']
new_url = urllib.parse.urlunsplit(unsplit)
print(new_url == url) # True

# urljoin合并链接,用于绝对路径和相对路径的合并
print(urllib.parse.urljoin('http://www.abc.com/abc.html', 'xyz.html'))
print(urllib.parse.urljoin('http://www.abc.com/a/b/c/abc.html', 'xyz.html'))
print(urllib.parse.urljoin('http://www.abc.com/a/b/c/abc.html', '../xyz.html'))
print(urllib.parse.urljoin('http://www.abc.com/a/b/c/abc.html', '../../xyz.html'))
print(urllib.parse.urljoin('http://www.abc.com/a/b/c/abc.html', '../../../xyz.html'))
# http://www.abc.com/xyz.html
# http://www.abc.com/a/b/c/xyz.html
# http://www.abc.com/a/b/xyz.html
# http://www.abc.com/a/xyz.html
# http://www.abc.com/xyz.html

# 序列化和反序列化查询参数
data = {'a': 1, 'b': 2}
data = urllib.parse.urlencode(data)
print(data)
print(urllib.parse.parse_qs(data)) # 转换成字典
print(urllib.parse.parse_qsl(data)) # 转换成元组列表
# a=1&b=2
# {'a': ['1'], 'b': ['2']}
# [('a', '1'), ('b', '2')]

# url编码和解码
chs = '你好'
chr_chs = urllib.parse.quote(chs) # 编码
chs = urllib.parse.unquote(chr_chs) # 解码
print(chr_chs, chs, sep='\n')
#%E4%BD%A0%E5%A5%BD
#你好
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值