Python URL处理利器urllib.parse模块详解及实战应用

urlparse 是 Python 标准库 urllib.parse 模块中的一个重要部分,提供了多种方法来解析和处理 URL。下面是对 urlparse 的详细介绍,包括每个方法的使用案例。

urllib.parse 模块

urllib.parse 模块提供了以下主要功能:

  • 解析 URL
  • 构造 URL
  • 编码和解码 URL 组件
  • 主要方法

    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 相关的任务。希望这些详细的介绍和示例对你整理笔记有所帮助!

    作者:燃灯工作室

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python URL处理利器urllib.parse模块详解及实战应用

    发表回复