Python URL处理利器urllib.parse模块详解及实战应用
urlparse
是 Python 标准库 urllib.parse
模块中的一个重要部分,提供了多种方法来解析和处理 URL。下面是对 urlparse
的详细介绍,包括每个方法的使用案例。
urllib.parse
模块
urllib.parse
模块提供了以下主要功能:
主要方法
1. urlparse(urlstring, scheme='', allow_fragments=True)
功能: 将一个 URL 字符串解析为一个 ParseResult
对象。
参数:
urlstring
: 要解析的 URL 字符串。scheme
: 默认方案(如果 URL 中没有指定)。allow_fragments
: 是否允许片段标识符(默认为 True
)。返回值: ParseResult
对象,包含以下属性:
scheme
: URL 方案(如 http
, https
等)。netloc
: 网络位置(主机名和端口)。path
: 路径。params
: 参数(很少使用)。query
: 查询字符串。fragment
: 片段标识符。示例:
from urllib.parse import urlparse
url = 'https://www.example.com/path?query=arg#fragment'
parsed_url = urlparse(url)
print(parsed_url) # 输出: ParseResult(scheme='https', netloc='www.example.com', path='/path', params='', query='query=arg', fragment='fragment')
print(parsed_url.scheme) # 输出: https
print(parsed_url.netloc) # 输出: www.example.com
print(parsed_url.path) # 输出: /path
print(parsed_url.query) # 输出: query=arg
print(parsed_url.fragment) # 输出: fragment
2. urlunparse(parts)
功能: 将一个 ParseResult
对象或元组重新组合成一个完整的 URL 字符串。
参数:
parts
: 一个包含六个元素的元组或 ParseResult
对象。返回值: 完整的 URL 字符串。
示例:
from urllib.parse import urlunparse
parts = ('https', 'www.example.com', '/path', '', 'query=arg', 'fragment')
url = urlunparse(parts)
print(url) # 输出: https://www.example.com/path?query=arg#fragment
3. urljoin(base, url, allow_fragments=True)
功能: 将相对 URL 和基础 URL 合并成一个绝对 URL。
参数:
base
: 基础 URL。url
: 相对 URL。allow_fragments
: 是否允许片段标识符(默认为 True
)。返回值: 合并后的绝对 URL。
示例:
from urllib.parse import urljoin
base = 'https://www.example.com/path/'
relative_url = 'subpath?query=arg#fragment'
absolute_url = urljoin(base, relative_url)
print(absolute_url) # 输出: https://www.example.com/path/subpath?query=arg#fragment
4. urlencode(query, doseq=False, safe='', encoding=None, errors=None)
功能: 将查询参数字典编码为 URL 查询字符串。
参数:
query
: 查询参数字典。doseq
: 如果为 True
,则序列化列表或元组(默认为 False
)。safe
: 不需要转义的字符集合。encoding
: 编码方式(默认为 utf-8
)。errors
: 编码错误处理方式。返回值: 编码后的查询字符串。
示例:
from urllib.parse import urlencode
params = {'key1': 'value1', 'key2': 'value2'}
encoded_params = urlencode(params)
print(encoded_params) # 输出: key1=value1&key2=value2
# 处理列表
params_with_list = {'key1': ['value1', 'value2']}
encoded_params_with_list = urlencode(params_with_list, doseq=True)
print(encoded_params_with_list) # 输出: key1=value1&key1=value2
5. parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')
功能: 将 URL 查询字符串解析为字典。
参数:
qs
: 查询字符串。keep_blank_values
: 是否保留空白值(默认为 False
)。strict_parsing
: 是否严格解析(默认为 False
)。encoding
: 编码方式(默认为 utf-8
)。errors
: 编码错误处理方式。返回值: 解析后的字典。
示例:
from urllib.parse import parse_qs
query_string = 'key1=value1&key2=value2&key1=value3'
parsed_query = parse_qs(query_string)
print(parsed_query) # 输出: {'key1': ['value1', 'value3'], 'key2': ['value2']}
6. parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')
功能: 将 URL 查询字符串解析为键值对列表。
参数:
qs
: 查询字符串。keep_blank_values
: 是否保留空白值(默认为 False
)。strict_parsing
: 是否严格解析(默认为 False
)。encoding
: 编码方式(默认为 utf-8
)。errors
: 编码错误处理方式。返回值: 键值对列表。
示例:
from urllib.parse import parse_qsl
query_string = 'key1=value1&key2=value2&key1=value3'
parsed_query_list = parse_qsl(query_string)
print(parsed_query_list) # 输出: [('key1', 'value1'), ('key2', 'value2'), ('key1', 'value3')]
7. quote(string, safe='/', encoding=None, errors=None)
功能: 将字符串中的特殊字符进行 URL 编码。
参数:
string
: 要编码的字符串。safe
: 不需要转义的字符集合。encoding
: 编码方式(默认为 utf-8
)。errors
: 编码错误处理方式。返回值: 编码后的字符串。
示例:
from urllib.parse import quote
string = 'hello world'
encoded_string = quote(string)
print(encoded_string) # 输出: hello%20world
# 指定安全字符
encoded_string_safe = quote(string, safe=' ')
print(encoded_string_safe) # 输出: hello%20world
8. unquote(string, encoding='utf-8', errors='replace')
功能: 将 URL 编码的字符串解码回原始字符串。
参数:
string
: 要解码的字符串。encoding
: 编码方式(默认为 utf-8
)。errors
: 编码错误处理方式。返回值: 解码后的字符串。
示例:
from urllib.parse import unquote
encoded_string = 'hello%20world'
decoded_string = unquote(encoded_string)
print(decoded_string) # 输出: hello world
总结
urllib.parse
提供了丰富的工具来处理 URL,从简单的解析到复杂的编码和解码操作。通过这些方法,你可以轻松地处理各种 URL 相关的任务。希望这些详细的介绍和示例对你整理笔记有所帮助!
作者:燃灯工作室