此方法可以实现url的识别和分段。
标准链接格式为:scheme://netloc/path;params?query#fragment
from urllib.parse import urlparse
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment')
print(type(result),result)
print(result.scheme,result[0],result.netloc,result[1],sep='\n')
运行结果为:
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')
http
http
www.baidu.com
www.baidu.com
参数 | 作用 |
---|---|
urlstring | 必填,待解析的url |
scheme | 默认的协议,如http,https。链接没有协议信息时生效 |
allow_fragments | 是否忽略fragment,如果设置False,fragment部分会被忽略,解析为path、params或者query的一部分,而fragment部分为空。当URL不包含params和query时候,fragment会被解析为path一部分 |
from urllib.parse import urlparse
result = urlparse('www.baidu.com/index.html;user?id=5#comment', scheme='https')
print(result)
结果为:
ParseResult(scheme='https', netloc='', path='www.baidu.com/index.html', params='user', query='id=5', fragment='comment')
from urllib.parse import urlparse
result = urlparse('http://www.baidu.com/index.html;user?id=5#comment', allow_fragments=False)
print(result)
结果为:
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5#comment', fragment='')
urlunparse()和urlparse()相反,他接受的参数是一个长度为6的可迭代对象,将URL的多个部分组合为一个URL。
from urllib.parse import urlunparse
data = ['http','www.baidu.com','index.html','user','a=6','comment']
print(urlunparse(data))
urljoin()也可以对网址进行拼接
from urllib.parse import urljoin
print(urljoin('http://www.baidu.com','FAQ.html')) #http://www.baidu.com/FAQ.html
print(urljoin('www.baidu.com','?category=2#comment')) #www.baidu.com?category=2#comment
print(urljoin('www.baidu.com','http://qq.com')) #http://qq.com
urlencode在构造GET请求参数的时候非常有用,比如:
from urllib.parse import urlencode
params = {
'name': 'germey',
'age': 22
}
base_url = 'http://www.baidu.com?'
url = base_url + urlencode(params)
print(url)
# http://www.baidu.com?name=germey&age=22
我们也可以将一串GET请求参数反序列化,转换为字典,比如:
from urllib.parse import parse_qs
query = 'name=germey&age=22'
print(parse_qs(query))
# {'name': ['germey'], 'age': ['22']}
我们还可以将一串GET请求参数反序列化,转换为元组组成的列表,比如:
from urllib.parse import parse_qsl
query = 'name=germey&age=22'
print(parse_qsl(query))
# [('name', 'germey'), ('age', '22')]
url中出现中文可能会乱码,所以中文路径需要转化,就用到了quote方法。
from urllib.parse import quote
keyword = "壁纸"
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print(url)
# https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8
有了quote方法转换,也需要有unquote方法对URL进行解码
from urllib.parse import unquote
url = 'https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8'
print(unquote(url))