urllib.parse - 将URL解析为组件html
urllib.parse
定义了一个标准接口,用于在组件中解析统一资源定位符(URL)字符串(寻址方案,网络位置,路径等),将组件组合回URL字符串,并将“相对URL”转换为绝对URL给出“基本URL”。python
该模块旨在匹配相对统一资源定位器上的Internet RFC。它支持下列URL方案:file
,ftp
,gopher
,hdl
,http
,https
,imap
,mailto
,mms
, news
,nntp
,prospero
,rsync
,rtsp
,rtspu
,sftp
, shttp
,sip
,sips
,snews
,svn
,svn+ssh
,telnet
, wais
,ws
,wss
。网络
urllib.parse
模块定义了分为两大类的功能:URL解析和URL引用。app
URL解析功能侧重于将URL字符串拆分为其组件,或者将URL组件组合为URL字符串。ssh
将URL解析为六个组件,返回一个6个元素的元组,对应URL的通常结构:scheme://netloc/path;parameters?query#fragment
。每一个元组项都是一个字符串,可能为空。组件不会以较小的部分分解(例如,网络位置是单个字符串),而且不会展开%escapes。如上所示的分隔符不是结果的一部分,除了路径组件中的前导斜杠,若是存在则保留。例如:ide
>>> 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,将以路径组件开始svn
>>> 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
在返回值中设置为空字符串。ui
返回值是一个元组,这样咱们能够经过索引或者吗命名属性访问,以下:编码
属性 | 索引 | 值 | 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='')
bytes.decode()
方法所接受的那样。keep_blank_values
是一个标志,指示百分比编码的查询中的空白值是否应该被视为空白字符串。true值指示空白应保留为空白字符串。默认的false值表示要忽略空白值,并将其视为未包含。strict_parser
是一个标志,指示如何处理解析错误。若是为false(默认值),错误将被默认忽略。若是为真,错误将引起ValueError异常。encoding
和errors
参数指定如何将百分比编码的序列解码为Unicode字符,正如bytes.decode()方法所接受的那样。max_num_fields
是要读取的字段的最大数量。若是设置,则若是读取的字段超过max_num_fields,则抛出ValueError。这相似于urlparse(),但不会从URL中分割参数。若是须要将容许参数应用于URL路径部分的每一个段的最新URL语法(请参阅RFC 2396),则一般应该使用该方法而不是urlparse()。须要一个单独的函数来分离路径段和参数。这个函数返回5个(对比 urlparse没有params)元素的元组:
(addressing scheme, network location, path, query, fragment identifier)