12.1.2 反解析
还可以利用一些方法把分解的URL的各个部分重新组装在一起,形成一个串。解析的URL对象有一个geturl()方法。
from urllib.parse import urlparse
original = 'http://netloc/path;param?query=arg#frag'
print('ORIG :',original)
parsed = urlparse(original)
print('PARSED:',parsed.geturl())
geturl()只适用于urlparse()或urlsplit()返回的对象。
运行结果:
利用urlunparse()可以将包含串的普通元组重新组合为一个URL。
from urllib.parse import urlparse,urlunparse
original = 'http://netloc/path;param?query=arg#frag'
print('ORIG :',original)
parsed = urlparse(original)
print('PARSED:',type(parsed),parsed)
t = parsed[:]
print('TUPLE :',type(t),t)
print('NEW :',urlunparse(t))
尽管urlparse()返回的ParseResult可以作为一个元组,但这个例子却显式地创建了一个元组,来展示urlunparse()也适用于普通元组。
运行结果:
如果输入URL包含多余的部分,那么重新构造的URL可能会将其去除。
from urllib.parse import urlparse,urlunparse
original = 'http://netloc/path;?#'
print('ORIG :',original)
parsed = urlparse(original)
print('PARSED:',type(parsed),parsed)
t = parsed[:]
print('TUPLE :',type(t),t)
print('NEW :',urlunparse(t))
在这里,原URL中没有参数、查询和片段。新URL看起来与原URL并不相同,不过按照标准它们是等价的。
运行结果: