解析链接
文章目录
一、简介 urllib.parse
它定义了处理 URL 的标准接口,例如实现 URL 各部 分的抽取、合并以及链接转换。
二、函数介绍
1 urlparse()6
功能:实现URL的识别和分段
(1)代码实例:
from urllib import parse
url1='http://www.baidu.com/index.html;user?id=5#comment'
result=parse.urlparse(url1)
print(type(result))
print(result)
运行结果:
<class 'urllib.parse.ParseResult'>
ParseResult(scheme='http', netloc='www.baidu.com', path='/index.html', params='user', query='id=5', fragment='comment')
(2)定义域值域
url1='http://www.baidu.com/index.html;user?
result=parse.urlparse(url1)
定义域:
URL
参数:
urllib.parse.urlparse(urlstring, scheme=”, allow_fragments=True)
urlstring :
待解析的URL
scheme:
默认协议,如果解析URL中有协议时,解析为原有的协议,URL中没有协议,则解析为默认协议。
allow_fragments:
是否忽略fragment,如果被设置为False,fragment部分就会被忽略,它被解析为path,parameter,或者query的一部分,而fragment部分为空。
值域:
(元组)ParseResult对象 一个标准的链接格式:
scheme://netloc/path;params?query#fragment
;后面是参数
?后面是查询条件 query, 一般用作 GET 类型的 URL;
#后面是锚点,用于直接定位页面内部的下拉位置。
(3)ParseResult中各属性的获取方法
返回结果 ParseResult 实际上是一个元组,我们可以用索引顺序来获取,也可以用属性名获取。
2 urlunparse()
功能:构造URL
(1)代码实例:
from urllib.parse import urlunparse
data=['https','www.baidu.com','index.html','user','id=5','comment']
print(urlunparse(data))
https://www.baidu.com/index.html;user?id=5#comment
(2)定义域值域
定义域:
它接受的参数是一个可迭代对象, 但是它的长度必须是 6, 否则会抛出参数数量不足或者过多的问题,可使用列表元组等数据类型。
值域:
一个包含六个字段的完整URL
3 urlsplit()5
与urlparse()非常相似,只是parmas部分被分到path,只有五个部分
返回结果是 SplitResult , 它其实也是一个元组类型, 既可以用属性获取值,也可以 用索引来获取
4 urlunsplit()
与 urlunparse()类似,它也是将链接各个部分组合成完整链接的方法,传人的参数也是一个可迭 代对象,例如列表、 元组等,唯一的区别是长度必须为 5
5 urljoin()
功能:
(1)我们可以提供一个 base_url (基础链 接 ) 作为第一个参数,将新的链接作为第二个参数,该方法会分析 base_url 的 scheme、 netloc 和 path 这 3 个内容并对新链接缺失的部分进行补充,最后返回结果。
定义域:
基础URL,待补充完整的URL
值域:
补充好scheme,netloc,path的新URL
注意:
ba咒一url 提供了三项内容 scheme、 netloc 和 path。 如果这 3 项在新的链接里不存在, 就予以补充;如果新的链接存在,就使用新的链接的部分。 而 base_url 中的 params 、 query 和 fragment 是不起作用的。
6urlencode()字典–字符串
将字典格式转化为URL中查询字符串需要的格式
(1)代码实例:
from urllib.parse import urlencode
params={'name':'yue',
'age':'21'}
base_url='https://www.baidu.com?'
url=base_url+urlencode(params)
print(url)
运行结果
https://www.baidu.com?name=yue&age=21
(2)定义域:
字典
(3)值域:
字符形式的字典,用于构造URL中的查询字符串。
7parse_qs()字符串–字典
功能:
有了序列化,必然就有反序列化。 如果我们有一串 GET 请求参数,利用 parse_qs()方法, 就可 以将它转回字典
代码实例:
from urllib.parse import parse_qs
query='name=yue&age=21'
dict=parse_qs(query)
print(dict)
运行结果
{'name': ['yue'], 'age': ['21']}
定义域:
URL中的查询字符串
值域:
字典
8 parse_qsl()字符串–元组组成的列表
将参数转化为元组组成的列表
代码实例
from urllib.parse import parse_qsl
query= 'name=germey&age=22' print(parse_qsl(query))
运行结果如下:
[('name’,’germey'), ('age ', '22')]
定义域:
URL中的查询字符串
值域:
元组组成的列表
summary:
urlencode 将字典序列化为字符串
parse_qs将字符串转化为字典
parse_qsl将字符串转化为元组组成的列表
9 quote()中文–编码
功能:将中文字符转化为URL编码
代码实例
from urllib.parse import quote
from urllib.request import urlopen
keyword='明月'
base_url='https://www.baidu.com?wd='
url=base_url+quote(keyword)
response=urlopen(url)
print(response.read().decode('utf-8'))
定义域:
中文
值域:
格式化可用于URL的中文编码
10 unquote()
解码URL