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。
1.urlparse()方法
parse子模块中提供了urlparse()方法,用于实现将URL分解成不同的部分,其语法格式如下:
参数说明:
☑ urlstring:需要拆分的URL,该参数为必选参数。
☑ scheme:可选参数,表示需要设置的默认协议。如果需要拆分的URL中没有协议(如HTTPS、HTTP等),则可以通过该参数设置一个默认的协议,该参数的默认值为空字符串。
☑ allow_fragments:可选参数,如果该参数设置为False,表示忽略fragments这部分内容,默认为True。
(实例位置:资源包\Code\02\13)
使用urlparse()方法拆分URL的示例代码如下:
程序运行结果如下:
从以上的运行结果中可以看出,调用urlparse()方法将返回一个ParseResult对象。该对象由6部分组成,scheme表示协议,netloc表示域名,path表示访问的路径,params表示参数,query表示查询条件,fragment表示片段标识符。
除了直接获取返回的ParseResult对象,还可以直接获取ParseResult对象中的每个属性值。关键代码如下:
2.urlsplit()方法
(实例位置:资源包\Code\02\14)
urlsplit()方法与urlparse()方法类似,都可以实现URL的拆分,只是urlsplit()方法不再单独拆分params这部分内容,而是将params合并到path,所以返回的结果中只有5部分内容,并且返回的数据类型为SplitResult。示例代码如下:
程序运行结果如下:
从以上的运行结果中可以看出,使用urlsplit()方法拆分后的URL将以SplitResult类型返回,该类型的数据既可以使用属性获取对应的值,也可以使用索引获取对应的值。示例代码如下:
1.urlunparse()方法
parse子模块提供了拆分URL的方法,也提供了urlunparse()方法来实现URL的组合。其语法格式如下:
参数说明:
☑ parts:表示用于组合URL的可迭代对象。
(实例位置:资源包\Code\02\15)
使用urlunparse()方法组合URL的示例代码如下:
程序运行结果如下:
在使用urlunparse()方法组合URL时,需要注意可迭代对象中的元素必须是6个,如果元素不足6个,则将出现如图2.18所示的错误信息。
图2.18 元素不足6个的错误提示
2.urlunsplit()方法
(实例位置:资源包\Code\02\16)
urlunsplit()方法与urlunparse()方法类似,同样是用于实现URL的组合,其参数也同样是一个可迭代对象,不过其元素必须是5个。示例代码如下:
程序运行结果如下:
urlunparse()方法与urlunsplit()方法可以实现URL的组合,而parse子模块还提供了一个urljoin()方法来实现URL的连接。其语法格式如下:
参数说明:
☑ base:表示基础链接。
☑ url:表示新的链接。
☑ allow_fragments:可选参数,如果该参数设置为False,表示忽略fragments这部分内容,默认为True。
(实例位置:资源包\Code\02\17)
urljoin()方法在实现URL连接时,base参数只可以设置scheme、netloc及path,如果第二个参数(url)是一个不完整的URL,那么第二个参数的值会添加至第一个参数(base)的后面,并自动添加斜杠(/)。如果第二个参数是一个完整的URL,将直接返回第二个参数所对应的值。示例代码如下:
程序运行结果如下:
URL编码是GET请求中比较常见的,是对请求地址中的参数进行编码,尤其是中文参数。parse子模块提供了urlencode()方法与quote()方法,用于实现URL的编码,而unquote()方法可以对加密后的URL进行解码。
1.urlencode()方法
(实例位置:资源包\Code\02\18)
urlencode()方法接收一个字典类型的值,所以要想将URL进行编码,需要先将请求参数定义为字典类型,再调用urlencode()方法进行请求参数的编码。示例代码如下:
程序运行结果如下:
地址中的“%E4%B8%AD%E5%9B%BD&”内容为中文转码后的效果。
2.quote()方法
(实例位置:资源包\Code\02\19)
quote()方法与urlencode()方法所实现的功能类似,但是urlencode()方法中只接收字典类型的参数,而quote()方法则可以将一个字符串进行编码。示例代码如下:
程序运行结果如下:
3.unquote()方法
(实例位置:资源包\Code\02\20)
unquote()方法可以将编码后的URL字符串逆向解码,无论通过urlencode()方法还是quote()方法,所编码的URL字符串都可以使用unquote()方法进行解码。示例代码如下:
程序运行结果如下:
(实例位置:资源包\Code\02\21)
请求地址的URL是一个字符串,如果需要将其中的参数转换为字典类型,那么可以先使用urlsplit()方法拆分URL,再调用query属性获取URL中的参数,最后使用parse_qs()方法将参数转换为字典类型的数据。示例代码如下:
程序运行结果如下:
(实例位置:资源包\Code\02\22)
除了parse_qs()方法,还有parse_qsl()方法可以将URL参数进行转换,不过parse_qsl()方法会将字符串参数转换为元组所组成的列表。示例代码如下:
程序运行结果如下:
本章e学码:关键知识点拓展阅读
CA证书
代理IP地址
Cookie
网络请求
Headers
e学码