实例域名: http://www.baidu.com/index.html;user?id=S#comment
URL通过特定的分隔符解析:
冒号’:‘前面的就是 scheme,代表协议;第一个’/‘符号前面便是 netloc ,即域名,后面是 path,即访 问路径(其实包含‘/’本身);分号’;‘后面是 params ,代表参数;问号’?‘后面是查询条件 query, 一般用作 GET 类型的 URL; 井号’#'后面是锚点,用于直接定位页面内部的下拉位置。
urllib.parse.urlparse(urlstring, scheme=”, allow_fragments=True)
scheme: 它是默认的协议(比如 http 或 https 等) 假如这个链接没有带协议信息,会将这个作为默认的协议。
allow_fragments :即是否忽略fragment。 如果它被设置为 False,干ragment部分就会被忽略, 它会被解析为 path、 parameters 或者 query 的一部分,而 fragment 部分为空。
返回一个元组,我们可以用索引顺序来获取,也可以用属性名获取。
实例代码:
from urllib.parse import *
url = 'http://www.baidu.com/index.html;user?id=5#comment'
result1 = urlparse(url)
print(type(result1))
print('result1 : ', result1)
result1 = urlparse(url, allow_fragments=False)
print(result1)
# urlsplit() :和 urlparse()方法非常相似, 只不过它不再单独解析 params 这一部分,只返回 5 个结果。同样返回也是元组。
result2 = urlsplit(url)
print('result2 : ', result2)
# urlunparse():接受一个可迭代对象(字典取得是key部分,贼傻),长度必须是6.组装为一个URL。
data1 = ['http', 'www.baidu.com', '/index.html', 'user', 'id=S', '#comment', ]
print(urlunparse(data1))
# urlunsplit() :与 urlunparse()类似,传入的参数也是一个可迭代对象 ,唯一的区别是长度必须为 5。
data2 = ['http', 'www.baidu.com', '/index.html;user', 'id=S', '#comment', ]
print(urlunsplit(data2))
# urljoin() :提供一个 base_url (基础链 接 ) 作为第一个参数,将新的链接作为第二个参数,该方法会分析 base_url 的 scheme、 netloc
# 和 path 这 3 个内容并对新链接缺失的部分进行补充,最后返回结果。
print(urljoin('http://www.baidu.com', '?category=2#comment'))
# urlencode() :将一个字典构造为 GET 请求参数
params = {'scheme': 'http', 'netloc': 'www.baidu.com', 'path': '/index.html', 'name': 'germey', 'age': 22}
print(urlencode(params))
params = {'name': 'germey', 'age': 22}
print('http://www.baidu.com?' + urlencode(params)) #所以urlencode只是加参数,并不负责解析字典
# parse_qs():将参数转化字典
# parse_qsl():将参数转化为元组组成的列表
print(parse_qs('name=germey&age=22'))
print(parse_qsl('name=germey&age=22'))
# quote() :URL 中带有中文参数时,有时可能会导致乱码的问题,用这个方法可以将文字符转化为 URL 编码。
# unquote() :它可以进行 URL解码。
keyword = '壁纸'
url = 'https://www.baidu.com/s?wd='+ quote(keyword)
print(url)
print(unquote(url))
程序运行结果:
<class 'urllib.parse.ParseResult'>
result1 : ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5#comment', fragment='')
result2 : SplitResult(scheme='http', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment')
http://www.baidu.com/index.html;user?id=S##comment
http://www.baidu.com/index.html;user?id=S##comment
http://www.baidu.com?category=2#comment
scheme=http&netloc=www.baidu.com&path=%2Findex.html&name=germey&age=22
http://www.baidu.com?name=germey&age=22
{'name': ['germey'], 'age': ['22']}
[('name', 'germey'), ('age', '22')]
https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8
https://www.baidu.com/s?wd=壁纸