参考地址:https://docs.python.org/3/library/urllib.parse.html#module-urllib.parse
翻译有误之处,请见谅。。。
该模块定义了一个用组件来分开URL的标准接口(解决方案,网络位置,路径等),将组件重新组合到URL字符串中,并将一
个"relative URL"转换为一个给定"base URL"的绝对URL。
该模块被设计为匹配相对统一资源定位器上的互联网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。
该模块分为URL解析和URL引用两部分。
URL解析函数的重点是将URL字符串拆分到其组件中,或将URL组件组合到URL字符串中。
一、URL解析
urllib.parse.
urlparse
(urlstring, scheme='', allow_fragments=True)
一个URL解析被分为六个组件,并返回"6-tuple"。这符合URL的一般结构(scheme://netloc/path;parameters?
query#fragment),每一个元组项都是一个字符串(可能是空的)。组件不是以更小的部分分解的,并且不扩展%转义。
其中:scheme参数提供默认的解决方案,仅仅在URL不指定一个时使用。作为urlstring,它应该是相同类型(text 或 bytes)
如果allow_fragments参数是False,片段标识符不可识别。相反,它们被解析为路径、参数或查询组件的一部分,并将
片段设置为返回值中的空字符串。
返回值实际上是一个元组的一个子类的实例,该类具有以下附加的只读的方便属性:
Attribute | Index | Value | Value if not present |
---|---|---|---|
scheme | 0 | URL scheme specifier | scheme parameter |
netloc | 1 | Network location part | empty string |
path | 2 | Hierarchical path | empty string |
params | 3 | Parameters for last path element | empty string |
query | 4 | Query component | empty string |
fragment | 5 | Fragment identifier | empty string |
username | User name | None | |
password | Password | None | |
hostname | Host name (lower case) | None | |
port | Port number as integer, if present | None |
from urllib import parse
o = parse.urlparse('http://fanyi.baidu.com/')
print(o)
print(o.geturl())
print(o.scheme)
urllib.parse.
parse_qs
(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace') 解析一个作为一个字符串参数给定的查询字符串(数据类型:application/x-www-form-urlencoded)。数据作为字典返回。字
典的键是唯一的查询变量名,值是每个名称的值列表。
其中:可选参数keep_blank_valuess是一个表示在percent-encoded空白值查询是否应该被视为空白字符串的标志,默认的
False值表示空白值被忽略。
可选参数strict_parsing是一个表示如何处理解析错误的标志。默认为False,表示错误被忽略。
可选参数encoding和errors指定如何解码percent-encoded序列成Unicode字符,并按bytes.decode()方法接受。
使用urllib.parse.urlencode()函数(doseq参数设置为True)将这种词典转换为查询字符串。
urllib.parse.
parse_qsl
(qs, keep_blank_values=False, strict_parsing=False, encoding='utf-8', errors='replace')
解析一个作为字符串参数给定的查询字符串(数据类型:application/x-www-form-urlencoded)。数据作为名称、值对的列表
返回。
其中:可选参数keep_blank_valuess是一个表示在percent-encoded空白值查询是否应该被视为空白字符串的标志,默认的
False值表示空白值被忽略。
可选参数strict_parsing是一个表示如何处理解析错误的标志。默认为False,表示错误被忽略。
可选参数encoding和errors指定如何解码percent-encoded序列成Unicode字符,并按bytes.decode()方法接受。
使用urllib.parse.urlencode()函数(doseq参数设置为True)将这种词典转换为查询字符串。
urllib.parse.
urlunparse
(parts)
用一个由urlparse()返回的元组构造URL。parts参数可以是任何 six-item 迭代器。
urllib.parse.
urlsplit
(urlstring, scheme='', allow_fragments=True)
类似urlparse(),但并不分开URL里的参数。需要一个单独的函数来分隔路径段和参数。该函数返回一个元组:(解决方案、网
络位置、路径、查询、片段标识符)。
返回值实际上是一个元组的一个子类的实例,该类具有以下附加的只读的方便属性:
Attribute Index Value Value if not present scheme
0 URL scheme specifier scheme parameter netloc
1 Network location part empty string path
2 Hierarchical path empty string query
3 Query component empty string fragment
4 Fragment identifier empty string username
User name None
password
Password None
hostname
Host name (lower case) None
port
Port number as integer, if present None
urllib.parse.
urlunsplit
(parts)
结合由urlsplit()返回的元组元素成一个完整的URL作为一个字符串。parts参数可以是任何 five-item 迭代器。
urllib.parse.
urljoin
(base, url, allow_fragments=True)
通过将“base URL”(base)与另一个URL(URL)相结合,构造一个完整的(绝对)URL。通俗地,它使用基本URL的组件,特
别是寻址方案、网络位置和(一部分)路径,以提供相对URL中缺少的组件。
其中,allow_fragments具有相同的含义,默认为urlparse()
比如:
from urllib.parse import urljoin
o = urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
print(o)
注:注意,如果URL是一个绝对URL(也就是说,从//或scheme://开始),URL的主机名和/或scheme将出现在结果中。
比如:
from urllib import parse
o = parse.urljoin('http://www.cwi.nl/%7Eguido/Python.html', '//www.python.org/%7Eguido')
print(o)
urllib.parse.
urldefrag
(url)
有片段标识符在URL中,则返回未修改的URL和一个空字符串。
返回值实际上是一个元组的一个子类的实例,该类具有以下附加的只读的方便属性:
Attribute | Index | Value | Value if not present |
---|---|---|---|
url | 0 | URL with no fragment | empty string |
fragment | 1 | Fragment identifier | empty string |
urllib.parse.SplitResult.
geturl
()
将原始的URL的重新组合版本作为字符串返回。这可能与原始URL不相同,因为scheme可能被归为小写,空组件可能被丢弃,具
体而言,空参数、查询和片段标识符将被删除。
如果通过原始解析函数返回,则该方法的结果保持不变:
from urllib.parse import urlsplit
url = 'HTTP://www.Python.org/doc/#'
r1 = urlsplit(url)
print(r1.geturl())
r2 = urlsplit(r1.geturl())
print(r2.geturl())
urllib.parse.
DefragResult
(
url
,
fragment
)
是urldefrag()结果包含str数据的具体类。encode()方法返回一个DefragResultBytes实例。
class urllib.parse.
ParseResult
(scheme, netloc, path, params, query, fragment)
是urlparse()结果包含str数据的具体类。encode()方法返回一个ParseResultBytes实例。
class urllib.parse.
SplitResult
(scheme, netloc, path, query, fragment)
是urlsplit()结果包含str数据的具体类。encode()方法返回一个SplitResultBytes实例。
class urllib.parse.
DefragResultBytes
(url, fragment)
是urldefrag()结果包含bytes数据的具体类。decode()方法返回一个DefragResult实例。
class urllib.parse.
ParseResultBytes
(scheme, netloc, path, params, query, fragment)
是urlparse()结果包含bytes数据的具体类。decode()方法返回一个ParseResult实例。
class urllib.parse.
SplitResultBytes
(scheme, netloc, path, query, fragment)
是urlsplit()结果包含bytes数据的具体类。decode()方法返回一个SplitResult实例。
二、URL引用
URL引用函数侧重与获取程序数据,并通过引用特殊字符和适当地编码非ASCII文本来使其作为URL组件安全使用
urllib.parse.
quote
(string, safe='/', encoding=None, errors=None)
使用%xx escpae替换字符串中的特殊字符。字符,数字和字符的"_.-"永远不会引用。默认情况下,此函数用于引用URL的路径
部分。可选的安全参数指定不应引用的额外ASCII字符-它的默认值是“/”。
其中:string可以是一个str或bytes
可选的encoding和errors参数指定如何处理非ascii字符,如接受str.encode()方法。encoding默认为“utf - 8”,errors默认为“strict”
比如:
quote('/El Niño/')
yields '/El%20Ni%C3%B1o/'
urllib.parse.
quote_plus
(string, safe='', encoding=None, errors=None)
类似quote(),但通过加号取代空格。当建立一个查询字符串加入URL时,作为引用的HTML表单值
比如:
quote_plus('/El Niño/')
yields '%2FEl+Ni%C3%B1o%2F'
urllib.parse.
quote_from_bytes
(bytes, safe='/')
类似quote(),但接受一个字节的对象而不是一个字符串,并且不执行字符串字节编码。
比如:
quote_from_bytes(b'a&\xef')
yields 'a%26%EF'
urllib.parse.
unquote
(string, encoding='utf-8', errors='replace')
用它们的单个字符等效替换%xx espace。可选的encoding和errors参数指定如何解码percent-encoded序列为Unicode字符,按
字节decode()方法接受。
字符串必须是str。
encoding默认为"utf-8",errors默认为"replace",这意味着占位符字符替换无效序列。
比如:
unquote('/El%20Ni%C3%B1o/')
yields '/El Niño/'
urllib.parse.
unquote_plus
(string, encoding='utf-8', errors='replace')
类似quote(),但通过空格替代加号,作为HTML表单所需的值。
字符串必须是str。
比如:unquote_plus('/El+Ni%C3%B1o/')
yields '/El Niño/'
urllib.parse.
unquote_to_bytes
(string)
用它们的single-octel等效替换%xx espace,并返回一个字节对象。
字符串可以是一个str或bytes。
如果它是一个非ASCII字符,字符串中的字符编码为 UTF-8 字节。
比如:
unquote_to_bytes('a%26%EF')
yields b'a&\xef'
urllib.parse.
urlencode
(query, doseq=False, safe='', encoding=None, errors=None, quote_via=quote_plus)
将映射对象或一个双元素元组序列(这可能包含str或bytes对象)转换成一个precent-encoded ASCII文本字符串。如果结果字
符串用作urlopen函数中的POST操作的数据,则应编码为bytes,否则会导致TypeError。
结果字符串是一系列由"&"字符分隔的 key=value 组合,其中键和值是被引用通过使用quote_via函数。默认情况下,
quote_plus()用于引用的值,这意味着空间被引用为“+”字和“/”字符被编码为% 2F,遵循标准的GET请求(application/x-www-
form-urlencoded)。
当使用两个元素元组序列作为查询参数时,每个元组的第一个元素是一个键,第二个元素是一个值。在本身的价值元素可以是
一个序列,在这种情况下,如果可选的参数doseq取值为TRUE,个别的被"&"分离的 key=value 是每个元素的值序列生成的关键。编
码字符串中的参数顺序将与序列中参数元组的顺序相匹配。
safe,encoding和errors参数传递到quote_via(当查询元素是一个str时,只有encoding和errors元素传递)。