Python中urllib.parse模块的使用方法详解
urllib.parse是Python的标准库中的模块,提供了用于解析URL和构建URL的功能。该模块可以将URL分割成各个组成部分,并且可以对这些部分进行编码和解码操作。
下面是urllib.parse模块的一些常用方法:
1. urlparse(urlstring, scheme='', allow_fragments=True): 将一个完整的URL字符串解析成各个组成部分,并返回一个解析结果的namedtuple对象。可以通过该对象的属性来访问各个部分的值。这个方法的常用参数有:urlstring表示需要解析的URL字符串,scheme表示URL的协议部分,allow_fragments表示是否允许解析fragment,默认为True。
from urllib.parse import urlparse
url = 'https://www.example.com:8080/path/to/page?query=string#fragment'
result = urlparse(url)
print('scheme:', result.scheme) # scheme: https
print('hostname:', result.hostname) # hostname: www.example.com
print('port:', result.port) # port: 8080
print('path:', result.path) # path: /path/to/page
print('query:', result.query) # query: query=string
print('fragment:', result.fragment) # fragment: fragment
2. urlunparse(parts): 将前面解析得到的各个部分组装成一个完整的URL字符串,并返回该字符串。
from urllib.parse import urlparse, urlunparse url = 'https://www.example.com:8080/path/to/page?query=string#fragment' result = urlparse(url) new_url = urlunparse(result) print(new_url) # https://www.example.com:8080/path/to/page?query=string#fragment
3. urlsplit(urlstring, scheme='', allow_fragments=True): 与urlparse类似,也是将一个完整的URL字符串解析成各个组成部分。不同的是,urlsplit方法不再返回一个namedtuple对象,而是返回一个包含5个元素的元组,依次是:scheme, netloc, path, query, fragment。
from urllib.parse import urlsplit
url = 'https://www.example.com:8080/path/to/page?query=string#fragment'
result = urlsplit(url)
print('scheme:', result[0]) # scheme: https
print('hostname:', result[1]) # hostname: www.example.com
print('port:', result[1].split(':')[1]) # port: 8080
print('path:', result[2]) # path: /path/to/page
print('query:', result[3]) # query: query=string
print('fragment:', result[4]) # fragment: fragment
4. urlunsplit(parts): 与urlunparse类似,是将通过urlsplit方法解析得到的5个组成部分组装成一个完整的URL字符串,并返回该字符串。
from urllib.parse import urlsplit, urlunsplit url = 'https://www.example.com:8080/path/to/page?query=string#fragment' result = urlsplit(url) new_url = urlunsplit(result) print(new_url) # https://www.example.com:8080/path/to/page?query=string#fragment
5. urlencode(query, doseq=False): 将字典或者元组列表形式的查询参数编码成URL格式。
from urllib.parse import urlencode
params = {
'name': 'John',
'age': 30,
'city': 'New York'
}
encoded_params = urlencode(params)
print(encoded_params) # name=John&age=30&city=New+York
6. parse_qs(qs, keep_blank_values=False, strict_parsing=False): 将URL中的查询参数解析成字典形式。
from urllib.parse import parse_qs
url = 'https://www.example.com?name=John&age=30&city=New+York'
params = parse_qs(url)
print(params) # {'name': ['John'], 'age': ['30'], 'city': ['New York']}
7. quote(string, safe='/', encoding=None, errors=None): 对URL中的特殊字符进行编码。
from urllib.parse import quote url = 'https://www.example.com?query=特殊字符' encoded_url = quote(url) print(encoded_url) # https%3A//www.example.com%3Fquery%3D%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6
8. unquote(string, encoding='utf-8', errors='replace'): 对URL中的特殊字符进行解码。
from urllib.parse import unquote encoded_url = 'https%3A//www.example.com%3Fquery%3D%E7%89%B9%E6%AE%8A%E5%AD%97%E7%AC%A6' decoded_url = unquote(encoded_url) print(decoded_url) # https://www.example.com?query=特殊字符
这些方法可以帮助我们对URL进行各种处理,如解析URL的各个组成部分,编码和解码URL中的特殊字符,构建URL等。
