紧接上一篇:Python3 模块2之 Urllib之 urllib.error
urllib.parse
urllib.parse 模块定义了一个标准接口,在组件(addressing scheme、网址以及路径等)中打破了统一资源定位器(URL)字符串,并将相对 URL(relative URL)转换为给定的
基 URL(base URL)
的绝对 URL(absolute URL)。
urllib.parse 被设计成在相对统一资源定位器(Relative Uniform Resource Locators)上与互联网 RFC 相匹配。它支持如下的 URL schemes (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 parsing (网址解析)和URL quoting(地址引用) 。
一. 网址解析(URL Parsing)
URL 解析函数专注于将 URL 字符串拆分为其组件,或将 URL 组件组合到 URL 字符串中。
下面简要分析使用对应解析函数
1.urlparse
定义:urllib.parse.urlparse(urlstring, scheme=”, allow_fragments=True)
作用特点:将 URL 拆分成 6 大组件
通常一个基本点 URL 应该为:scheme://netloc/path;parameters?query#fragment
,每个元素组都为 String 字符串类型,或者为空。例如,http://www.cwi.nl:80/%7Eguido/Python.html
除这六大组件外,该类具有以下附加的只读便利属性(可看下表):
属性 | 索引 | 值 | 值为 None |
---|---|---|---|
scheme | 0 | URL 协议 | scheme 参数 |
netloc | 1 | 网络端口 | 空字符串 |
path | 2 | 分层路径 | 空字符串 |
params | 3 | 最后一个路径元素参数 | 空字符串 |
query | 4 | Query 组件 | 空字符串 |
fragment | 5 | 片段标志符 | 空字符串 |
username | 用户名 | None | |
password | Password | None | |
hostname | 主机名 (小写) | None | |
port | 如果存在,端口值为整数 | None |
下面是一个实例:
#! /usr/bin/evn python3
#"测试urlparse"
#导入parse模块
from urllib import parse
urp = parse.urlparse('https://docs.python.org/3/search.html?q=parse&check_keywords=yes&area=default')
print(urp)
#result:ParseResult(scheme='http', netloc='www.baidu.com:80', path='/doc', params='', query='age=5', fragment='ff')
print(urp.scheme)
#result:http
print(urp.netloc)
#result:www.baidu.com:80
输出:
ParseResult(scheme='https', netloc='docs.python.org', path='/3/search.html', params='', query='q=parse&check_keywords=yes&area=default', fragment='')
https
docs.python.org
urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding=’utf-8’, errors=’replace’)
2.urlunparse
定义:urllib.parse.urlunparse(parts)
从urlparse() 返回的元组元素构造一个URL 。该部分参数可以是任何六个组件的迭代。如果最初解析的 URL 有不必要的分隔符(例如 ?
;带有空查询; RFC 声明它们是等同的),则这可能会导致稍微不同但等效的URL 。
下面是一个实例:
#! /usr/bin/evn python
#测试urlunparse
#导入parse模块
from urllib import parse
parsed=parse.urlparse('http://user:pass@NetLoc:80/path;parameters?query=argument#fragment')
print(parsed)
url=parse.urlunparse(parsed)
print(url)
输出:
ParseResult(scheme='http', netloc='user:pass@NetLoc:80', path='/path', params='parameters', query='query=argument', fragment='fragment')
http://user:pass@NetLoc:80/path;parameters?query=argument#fragment
三.parse_qs
定义:urllib.parse.parse_qs(qs, keep_blank_values=False, strict_parsing=False, encoding=’utf-8’, errors=’replace’)
解析一个作为字符串参数给定的查询字符串(类型application/x-www-form-urlencoded
类型的数据)。数据作为字典返回。字典键是唯一的查询变量名且值是每个名称的值列表。
可选参数 keep_blank_values
是指示分空值编码的查询应处理为空字符串标志。一个真值表示空值应保留为空字符串。参数 keep_blank_values
的默认值为 false
表示空值将被忽略,并被视为不包括在内。
可选参数 strict_parsing
是一个标志,表示如何处理解析错误。如果值为 FALSE(默认)
,错误将被忽略。如果是 `TRUE 1的,误差使 ValueError 异常增加。
四.parse_qsl
定义:urllib.parse.parse_qsl(qs, keep_blank_values=False, strict_parsing=False, encoding=’utf-8’, errors=’replace’)
基本用法与 parse_qs 一致,只是urllib.parse.parse_qs 返回字典,urllib.parse.parse_qsl 返回列表。
下面是一个针对 三、四的实例:
from urllib import parse
url = r'https://docs.python.org/3.5/search.html?q=parse&check_keywords=yes&area=default'
parseResult = parse.urlparse(url)
#print(parseResult)
# parseResult 数据格式满足 parse.parse_qs、parse.parse_qsl 传入的数据格式要求
param_dict = parse.parse_qs(parseResult.query)
param_list = parse.parse_qsl(parseResult.query)
print("返回字典:",param_dict)
print("返回列表:"