• urllib.parse — URL解析


    urllib.parse - 将URL解析为组件

    urllib.parse定义了一个标准接口,用于在组件中解析统一资源定位符(URL)字符串(寻址方案,网络位置,路径等),将组件组合回URL字符串,并将“相对URL”转换为绝对URL给出“基本URL”。

    该模块旨在匹配相对统一资源定位器上的Internet RFC。它支持下列URL方案:fileftpgopherhdlhttphttpsimapmailtommsnewsnntpprosperorsyncrtsprtspusftpshttpsipsipssnewssvnsvn+sshtelnetwaiswswss

    urllib.parse模块定义了分为两大类的功能:URL解析URL引用

    URL解析

    URL解析功能侧重于将URL字符串拆分为其组件,或者将URL组件组合为URL字符串。

    urllib.parse.urlparse(urlstring,scheme ='',allow_fragments = True )

    • 将URL解析为六个组件,返回一个6个元素的元组,对应URL的一般结构:scheme://netloc/path;parameters?query#fragment。每个元组项都是一个字符串,可能为空。组件不会以较小的部分分解(例如,网络位置是单个字符串),并且不会展开%escapes。如上所示的分隔符不是结果的一部分,除了路径组件中的前导斜杠,如果存在则保留。例如:

      >>> from urllib.parse import urlparse
      >>> o = urlparse('http://www.cwi.nl:80/%7Eguido/Python.html')
      >>> o
      ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
      >>> o.scheme
      'http'
      >>> o.port
      80
      >>> o.geturl()
      'http://www.cwi.nl:80/%7Eguido/Python.html'
      
    • 只有在'//'正确引入的情况下, urlparse才会识别netloc。否则,假定输入是一个相对URL,将以路径组件开始

       >>> from urllib.parse import urlparse
          
       >>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
       ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
       >>> urlparse('www.cwi.nl/%7Eguido/Python.html')
       ParseResult(scheme='', netloc='', path='www.cwi.nl/%7Eguido/Python.html', params='', query='', fragment='')
       >>> urlparse('help/Python.html')
       ParseResult(scheme='', netloc='', path='help/Python.html', params='', query='', fragment='')
      
    • scheme参数给出了默认的寻址方案,只有在URL没有指定寻址方案时才使用。它应该是与urlstring相同的类型(文本或字节),只是默认值''总是允许的,并在适当时自动转换为''

      如果allow_fragments参数为false,则无法识别片段标识符。相反,它们被解析为路径,参数或查询组件的一部分,并fragment在返回值中设置为空字符串。

      返回值是一个元组,这样我们可以通过索引或者吗命名属性访问,如下:

      属性 索引 Value if not present
      scheme 0 协议 scheme参数
      netloc 1 网络位置部分 空字符串
      path 2 分层路径 空字符串
      params 3 最后一个路径元素的参数 空字符串
      query 4 查询 空字符串
      fragment 5 信息片段 空字符串
      username 用户名 None
      password 密码 None
      hostname 主机名 None
      port 端口号 None
    • 如果在URL中指定了无效端口,则读取该port属性将引发ValueError异常。

    • netloc属性中不匹配的方括号将引发ValueError。

    • 与所有命名元组的情况一样,子类还有一些特别有用的附加方法和属性。一种这样的方法是_replace()。该_replace()方法将返回一个新的ParseResult对象,用新值替换指定的字段。

       >>> from urllib.parse import urlparse
       >>> u = urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
       >>> u
       ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
       >>> u._replace(scheme='http')
       ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html', params='', query='', fragment='')
      

    urllib.parse.parse_qs(qs,keep_blank_values = False,strict_parsing = False,encoding ='utf-8',errors ='replace',max_num_fields = None )

    • 解析作为字符串参数给出的查询字符串(类型为 application / x-www-form-urlencoded的数据)。数据作为字典返回。字典键是唯一的查询变量名称,值是每个名称的值列表。
    • 可选参数keep_blank_values是一个标志,指示百分比编码查询中的空值是否应被视为空字符串。true值表示空格应保留为空字符串。默认的false值表示将忽略空白值并将其视为未包含它们。
    • 可选参数strict_parsing是一个标志,指示如何处理解析错误。如果为false(默认值),则会以静默方式忽略错误。如果为true,则错误会引发ValueError异常。
    • 可选的编码和错误参数指定如何将百分比编码的序列解码为Unicode字符,正如 bytes.decode()方法所接受的那样。
    • 可选参数max_num_fields是要读取的字段的最大数量。如果设置,则如果读取的字段超过max_num_fields,则抛出ValueError。
    • 使用urllib.parse.urlencode()函数(doseq参数设置为True)将这些字典转换成查询字符串。

    urllib.parse.parse_qsl(qs,keep_blank_values = False,strict_parsing = False,encoding ='utf-8',errors ='replace',max_num_fields = None )

    • 将给定的查询字符串解析为字符串参数(类型为application/x-www-form-urlencoded的数据)。数据作为名称、值对列表返回。
    • 可选参数keep_blank_values是一个标志,指示百分比编码的查询中的空白值是否应该被视为空白字符串。true值指示空白应保留为空白字符串。默认的false值表示要忽略空白值,并将其视为未包含。
    • 可选参数strict_parser是一个标志,指示如何处理解析错误。如果为false(默认值),错误将被默认忽略。如果为真,错误将引发ValueError异常。
    • 可选的encodingerrors参数指定如何将百分比编码的序列解码为Unicode字符,正如bytes.decode()方法所接受的那样。
    • 可选参数max_num_fields是要读取的字段的最大数量。如果设置,则如果读取的字段超过max_num_fields,则抛出ValueError。
    • 使用urllib.parse.urlencode()函数将这些对列表转换为查询字符串。

    urllib.parse.urlsplit(urlstring, scheme='', allow_fragments=True)

    • 这类似于urlparse(),但不会从URL中分割参数。如果需要将允许参数应用于URL路径部分的每个段的最新URL语法(请参阅RFC 2396),则通常应该使用该方法而不是urlparse()。需要一个单独的函数来分离路径段和参数。这个函数返回5个(对比 urlparse没有params)元素的元组:

      (addressing scheme, network location, path, query, fragment identifier)
      
  • 相关阅读:
    pyecharts包学习笔记
    敏捷测试关键成功因素
    JMeter—常见问题(十四)
    性能测试面试题
    python-Tkinter整理总结
    JMeter—系统性能分析思路(十三)
    JMeter—监听器(十二)
    JMeter—断言(十一)
    yii2.0 的数据的 增
    Windows下安装 使用coreseek
  • 原文地址:https://www.cnblogs.com/jiumo/p/11143741.html
Copyright © 2020-2023  润新知