python3.x学习之urilib.parse简单学习

参考地址: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(urlstringscheme=''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(qskeep_blank_values=Falsestrict_parsing=Falseencoding='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(qskeep_blank_values=Falsestrict_parsing=Falseencoding='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(urlstringscheme=''allow_fragments=True)

    类似urlparse(),但并不分开URL里的参数。需要一个单独的函数来分隔路径段和参数。该函数返回一个元组:(解决方案、网

络位置、路径、查询、片段标识符)。

    返回值实际上是一个元组的一个子类的实例,该类具有以下附加的只读的方便属性:

AttributeIndexValueValue if not present
scheme0URL scheme specifierscheme parameter
netloc1Network location partempty string
path2Hierarchical pathempty string
query3Query componentempty string
fragment4Fragment identifierempty string
username User nameNone
password PasswordNone
hostname Host name (lower case)None
port Port number as integer, if presentNone

urllib.parse.urlunsplit(parts)

    结合由urlsplit()返回的元组元素成一个完整的URL作为一个字符串。parts参数可以是任何 five-item 迭代器。

urllib.parse.urljoin(baseurlallow_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,并且片段标识符作为一个单独的字符串。如果没

有片段标识符在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())


class  urllib.parse. DefragResult ( url fragment )

    是urldefrag()结果包含str数据的具体类。encode()方法返回一个DefragResultBytes实例。


class urllib.parse.ParseResult(schemenetlocpathparamsqueryfragment)

    是urlparse()结果包含str数据的具体类。encode()方法返回一个ParseResultBytes实例。


class urllib.parse.SplitResult(schemenetlocpathqueryfragment)

    是urlsplit()结果包含str数据的具体类。encode()方法返回一个SplitResultBytes实例。


class urllib.parse.DefragResultBytes(urlfragment)

    是urldefrag()结果包含bytes数据的具体类。decode()方法返回一个DefragResult实例。


class urllib.parse.ParseResultBytes(schemenetlocpathparamsqueryfragment)

    是urlparse()结果包含bytes数据的具体类。decode()方法返回一个ParseResult实例。


class urllib.parse.SplitResultBytes(schemenetlocpathqueryfragment)

    是urlsplit()结果包含bytes数据的具体类。decode()方法返回一个SplitResult实例。


二、URL引用

    URL引用函数侧重与获取程序数据,并通过引用特殊字符和适当地编码非ASCII文本来使其作为URL组件安全使用


urllib.parse.quote(stringsafe='/'encoding=Noneerrors=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(stringsafe=''encoding=Noneerrors=None)

    类似quote(),但通过加号取代空格。当建立一个查询字符串加入URL时,作为引用的HTML表单值

比如:

quote_plus('/El Niño/') yields '%2FEl+Ni%C3%B1o%2F'


urllib.parse.quote_from_bytes(bytessafe='/')

    类似quote(),但接受一个字节的对象而不是一个字符串,并且不执行字符串字节编码。

比如:

quote_from_bytes(b'a&\xef') yields 'a%26%EF'


urllib.parse.unquote(stringencoding='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(stringencoding='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(querydoseq=Falsesafe=''encoding=Noneerrors=Nonequote_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元素传递)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值