购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.5 解析链接

urllib模块中提供了parse子模块,主要用于解析URL,可以实现URL的拆分或者组合。它支持多种协议的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。

2.5.1 拆分URL

1.urlparse()方法

parse子模块中提供了urlparse()方法,用于实现将URL分解成不同的部分,其语法格式如下:

参数说明:

☑ urlstring:需要拆分的URL,该参数为必选参数。

☑ scheme:可选参数,表示需要设置的默认协议。如果需要拆分的URL中没有协议(如HTTPS、HTTP等),则可以通过该参数设置一个默认的协议,该参数的默认值为空字符串。

☑ allow_fragments:可选参数,如果该参数设置为False,表示忽略fragments这部分内容,默认为True。

实例2.13 使用urlparse()方法拆分URL

(实例位置:资源包\Code\02\13)

使用urlparse()方法拆分URL的示例代码如下:

程序运行结果如下:

说明

从以上的运行结果中可以看出,调用urlparse()方法将返回一个ParseResult对象。该对象由6部分组成,scheme表示协议,netloc表示域名,path表示访问的路径,params表示参数,query表示查询条件,fragment表示片段标识符。

除了直接获取返回的ParseResult对象,还可以直接获取ParseResult对象中的每个属性值。关键代码如下:

2.urlsplit()方法

实例2.14 使用urlsplit()方法拆分URL

(实例位置:资源包\Code\02\14)

urlsplit()方法与urlparse()方法类似,都可以实现URL的拆分,只是urlsplit()方法不再单独拆分params这部分内容,而是将params合并到path,所以返回的结果中只有5部分内容,并且返回的数据类型为SplitResult。示例代码如下:

程序运行结果如下:

从以上的运行结果中可以看出,使用urlsplit()方法拆分后的URL将以SplitResult类型返回,该类型的数据既可以使用属性获取对应的值,也可以使用索引获取对应的值。示例代码如下:

2.5.2 组合URL

1.urlunparse()方法

parse子模块提供了拆分URL的方法,也提供了urlunparse()方法来实现URL的组合。其语法格式如下:

参数说明:

☑ parts:表示用于组合URL的可迭代对象。

实例2.15 使用urlunparse()方法组合URL

(实例位置:资源包\Code\02\15)

使用urlunparse()方法组合URL的示例代码如下:

程序运行结果如下:

注意

在使用urlunparse()方法组合URL时,需要注意可迭代对象中的元素必须是6个,如果元素不足6个,则将出现如图2.18所示的错误信息。

图2.18 元素不足6个的错误提示

2.urlunsplit()方法

实例2.16 使用urlunsplit()方法组合URL

(实例位置:资源包\Code\02\16)

urlunsplit()方法与urlunparse()方法类似,同样是用于实现URL的组合,其参数也同样是一个可迭代对象,不过其元素必须是5个。示例代码如下:

程序运行结果如下:

2.5.3 连接URL

urlunparse()方法与urlunsplit()方法可以实现URL的组合,而parse子模块还提供了一个urljoin()方法来实现URL的连接。其语法格式如下:

参数说明:

☑ base:表示基础链接。

☑ url:表示新的链接。

☑ allow_fragments:可选参数,如果该参数设置为False,表示忽略fragments这部分内容,默认为True。

实例2.17 使用urljoin()方法连接URL

(实例位置:资源包\Code\02\17)

urljoin()方法在实现URL连接时,base参数只可以设置scheme、netloc及path,如果第二个参数(url)是一个不完整的URL,那么第二个参数的值会添加至第一个参数(base)的后面,并自动添加斜杠(/)。如果第二个参数是一个完整的URL,将直接返回第二个参数所对应的值。示例代码如下:

程序运行结果如下:

2.5.4 URL的编码与解码

URL编码是GET请求中比较常见的,是对请求地址中的参数进行编码,尤其是中文参数。parse子模块提供了urlencode()方法与quote()方法,用于实现URL的编码,而unquote()方法可以对加密后的URL进行解码。

1.urlencode()方法

实例2.18 使用urlencode()方法编码请求参数

(实例位置:资源包\Code\02\18)

urlencode()方法接收一个字典类型的值,所以要想将URL进行编码,需要先将请求参数定义为字典类型,再调用urlencode()方法进行请求参数的编码。示例代码如下:

程序运行结果如下:

说明

地址中的“%E4%B8%AD%E5%9B%BD&”内容为中文转码后的效果。

2.quote()方法

实例2.19 使用quote()方法编码字符串参数

(实例位置:资源包\Code\02\19)

quote()方法与urlencode()方法所实现的功能类似,但是urlencode()方法中只接收字典类型的参数,而quote()方法则可以将一个字符串进行编码。示例代码如下:

程序运行结果如下:

3.unquote()方法

实例2.20 使用unquote()方法解码请求参数

(实例位置:资源包\Code\02\20)

unquote()方法可以将编码后的URL字符串逆向解码,无论通过urlencode()方法还是quote()方法,所编码的URL字符串都可以使用unquote()方法进行解码。示例代码如下:

程序运行结果如下:

2.5.5 URL参数的转换

实例2.21 使用parse_qs()方法将参数转换为字典类型

(实例位置:资源包\Code\02\21)

请求地址的URL是一个字符串,如果需要将其中的参数转换为字典类型,那么可以先使用urlsplit()方法拆分URL,再调用query属性获取URL中的参数,最后使用parse_qs()方法将参数转换为字典类型的数据。示例代码如下:

程序运行结果如下:

实例2.22 使用parse_qsl()方法将参数转换为元组所组成的列表

(实例位置:资源包\Code\02\22)

除了parse_qs()方法,还有parse_qsl()方法可以将URL参数进行转换,不过parse_qsl()方法会将字符串参数转换为元组所组成的列表。示例代码如下:

程序运行结果如下:

本章e学码:关键知识点拓展阅读

CA证书

代理IP地址

Cookie

网络请求

Headers

e学码 eL1UFH7YbxcyArsymsVjchM2GWkUw4xomjquaTOIYIGcn36dAvuY55uVungfIuEa

点击中间区域
呼出菜单
上一章
目录
下一章
×