介绍
This module defines a standard interface to break Uniform Resource Locator (URL) strings up in components (addressing scheme, network location, path etc.), to combine the components back into a URL string, and to convert a “relative URL” to an absolute URL given a “base URL.”
这是官方对parse模块的解释,大概的意思是:该模块定义了一个标准接口,用于在组件中解析统一资源定位符(URL)字符串(寻址方案,网络位置,路径等),将组件组合回URL字符串,并将“相对URL”转换为绝对URL给出“基本URL”。简单的说parse模块是用来解析和处理url。
安装
urllib.parse模块是ulilib库的子模块,直接在控制台cmd中使用命令pip install urllib安装urllib第三方库。
使用
1.urlparse()
urllib.parse.urlparse(urlstring, scheme=’’, allow_fragments=True)
urlparse()函数用来解析url,返回一个包含:协议(scheme) 域名(netloc) 路径(path) 路径参数(params) 查询参数(query) 片段(fragment)的ParseResult元组。因此可以同时通过索引和命名属性来获取 URL 中各部分的值。这六个元素的属性如下所示:
属性 | 索引 | 值 |
---|---|---|
scheme | 0 | URL方案说明符 |
netloc | 1 | 网络位置部分 |
path | 2 | 分层路径 |
params | 3 | 最后一个路径元素的参数 |
query | 4 | 查询组件 |
fragment | 5 | 片段识别 |
例如:
import urllib.parse
url = 'https://www.python123.io/tutorials/web_crawler_intro/#/section3/part2'
result = urllib.parse.urlparse(url)
print(result)
print(result.netloc)
print(result.fragment)
返回结果:
ParseResult(scheme='https', netloc='www.python123.io', path='/tutorials/web_crawler_intro/', params='', query='', fragment='/section3/part2')
www.python123.io
/section3/part2
2.urlunparse()
urlunparse()函数用来反解析url,相当于urlparse的逆过程。
url_new = urllib.parse.urlunparse(result)
print(url_new)
#初始url=https://www.python123.io/tutorials/web_crawler_intro/#/section3/part2
可以对比返回的结果与原url:
https://www.python123.io/tutorials/web_crawler_intro/#/section3/part2
3.urlsplit()/urlunsplit()
url.parse.urlsplit(url, scheme=’’, allow_fragments=True)
urlsplit()函数与urlparse()函数类似,唯一的区别是:urlsplit()函数解析url返回五个元素(缺少了params)。
urlunsplit()函数是urlsplit()的逆过程。
url1 = 'https://www.csdn.net/'
result1 = urllib.parse.urlsplit(url1)
print(result1)
url1_new = urllib.parse.urlunsplit(result1)
print(url1_new)
返回结果:
SplitResult(scheme='https', netloc='www.csdn.net', path='/', query='', fragment='')
https://www.csdn.net/
4.quote()/unquote()
quote(string, safe=’/’, encoding=None, errors=None)
quote()函数对输入的字符串进行编码,unquote()函数对输入的字符串解码,相当于quote的逆过程。(例如在百度上搜索书包的的网页是:‘https://www.baidu.com/s?wd=书包’, 但有些地方不支持中文字符串‘书包’,所以需要对’书包’进行编码)
word = '书包'
text = urllib.parse.quote(word,encoding='utf-8')
print(text)
text_new = urllib.parse.unquote(text,encoding='utf-8')
print(text_new)
返回的结果:
%E4%B9%A6%E5%8C%85
书包
5.urlencode()
urlencode(query, doseq=False, safe=’’, encoding=None, errors=None)
urlencode()函数把传入的参数对转换成标准的url格式。传入参数的格式只能为下面两种:
- [(key1,value1),(key2,value2),…]
- {‘key1’:‘value1’,‘key2’,‘value2’,…}
d={'wd':'bag','co':'black'} #搜索包,颜色是黑色
result_group = urllib.parse.urlencode(d)
print(result_group)
输出结果:
wd=bag&co=black
6.urljoin()
urljoin(base, url, allow_fragments=True)
urljoin()函数用于拼接url。
end_url = urllib.parse.urljoin('https://www.baidu.com/',result_group)
print(end_url)
输出结果:
https://www.baidu.com/wd=bag&co=black
总结
urllib.parse模块主要用于解析url,适用于网页全站爬取中对网页链接的筛选,提取。是一个很值得学习的python库。