parse 这里介绍十个url的常用处理方法,用于url的解析和构造
1.urlparse(将url拆分成6个部分,放在一个元祖里面)
import urllib.parse
print(urllib.parse.urlparse('http://www.zhihu.com/reqj;user?id=3#dsjf'))
# 结果:ParseResult(scheme='http', netloc='www.zhihu.com', path='/reqj', params='user', query='id=3', fragment='dsjf')
# import urllib.parse
# r = urllib.parse.urlparse('http:')
# print(type(r),r)
# 结果:'urllib.parse.ParseResult'> ParseResult(scheme='http', netloc='', path='', params='', query='', fragment='')
scheme=’http’, 表示请求协议 必须要有
netloc=’www.zhihu.com’, \表示请求的url 默认为空
path=’/reqj’,\请求路径 默认为空
params=’user’, \请求的参数 默认为空
query=’id=3’, \请求的查询条件 默认为空
fragment=’dsjf’ 标识符 默认为空
2.unurlparse 构造出url,但必须接受可迭代对象的参数,数量还是6个
import urllib.parse
data = ('http', 'www.zhihu.com', 'reqj', 'user', 'id=3', '戊二醛翁')
print(urllib.parse.urlunparse(data))
# 长度不对的时候报错:ValueError: not enough values to unpack (expected 7, got 6)
3.ursplit
import urllib.parse
print(urllib.parse.urlsplit('http://www.zhihu.com/reqj;user?id=3#dsjf'))
结果:SplitResult(scheme='http', netloc='www.zhihu.com', path='/reqj;user', query='id=3', fragment='dsjf')
解释: data那部分的内容,合并到path中去了
这个函数和urlparse()功能类似,唯一的区别是这个函数不会将url中的param分离出来;
就是说相比urlparse()少一个param元素,返回的元组元素参照urlparse()的元组表,少了一个param元素;
4.urlunsplit 与 urlunparse相似,只不过少传一个参数
import urllib.parse
data = ('http', 'www.zhihu.com', 'reqj', 'user', 'id=3')
print(urllib.parse.urlunsplit(data))
5.urljoin 一个基础的url和其他url相互结合
import urllib.parse
print(urllib.parse.urljoin('http://www.zhihu.com', '/index.html'))
# 结果:http://www.zhihu.com/index.html
print(urllib.parse.urljoin('http://www.zhihu.com/index.html', '/haha.html'))
# 结果:# print(urllib.parse.urljoin('http://www.zhihu.com', '/index.html'))
自动分析出基础url的scheme,netloc,path,缺少新的url会自动补充出来,有的话使用新的,
所以基础的url的params , query, fragment 是不起作用的
6.urlencode ,将字典中的参数转化成url中的参数来构造函数,在get构造函数的时候很好用
import urllib.parse
data = {
'name': 'czh'
}
url = 'http://www.zhihu.com?'
url = url + urllib.parse.urlencode(data)
print(url)
# 结果:http://www.zhihu.com?name=czh
7.parse_qs, 将get请求参数转化成字典
import urllib.parse
data = 'name=czh'
print(urllib.parse.parse_qs(data))
# # 结果:{'name': ['czh']}
8.parse_qsl 将请求参数转化成列表,列表中每一个元素都是元组,元组的第一个参数是参数名,第二个是参数值
import urllib.parse
data = 'name=czh'
print(urllib.parse.parse_qsl(data))
# 结果:[('name', 'czh')]
9.quote 传递参数是中文的时候可以使用quote进行url编码
import urllib.parse
data = '中国'
print(urllib.parse.quote(data))
# 结果:%E4%B8%AD%E5%9B%BD
10.unquote 对url编码进行解码
import urllib.parse
data = '%E4%B8%AD%E5%9B%BD'
print(urllib.parse.unquote(data))
# 结果:中国