欢迎访问宙启技术站
智能推送

Python中urllib.parse模块的使用方法详解

发布时间:2023-12-15 13:20:36

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等。