一 urlunparse()
1 代码
#它接受的参数是一个可迭代对象,但是它的长度必须是6,否则会抛出参数数量不足或者过多的问题。
from urllib.parse import urlunparse
data = ['http', 'www.baidu.com', 'index.html', 'user', 'a=6', 'comment']
print(urlunparse(data))
2 结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http://www.baidu.com/index.html;user?a=6#comment
3 说明
这里参数data用了列表类型。当然,你也可以用其他类型,比如元组或者特定的数据结构。
这样我们就成功实现了URL的构造。
二 urlsplit()
1 代码1
from urllib.parse import urlsplit
# 这个方法和urlparse()方法非常相似,只不过它不再单独解析params这一部分,只返回5个结果。
# params会合并到path中
result = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')
print(result)
2 结果1
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
SplitResult(scheme='http', netloc='www.baidu.com', path='/index.html;user', query='id=5', fragment='comment')
3 代码2
from urllib.parse import urlsplit
result = urlsplit('http://www.baidu.com/index.html;user?id=5#comment')
print(result.scheme, result[0])
4 结果2
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http http
5 说明2
可以发现,返回结果是SplitResult,它其实也是一个元组类型,既可以用属性获取值,也可以用索引来获取。
三 urlunsplit()
1 代码
from urllib.parse import urlunsplit
# 传入的参数也是一个可迭代对象,例如列表、元组等,唯一的区别是长度必须为5。
data = ['http', 'www.baidu.com', 'index.html', 'a=6', 'comment']
print(urlunsplit(data))
2 运行结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http://www.baidu.com/index.html?a=6#comment
四 urljoin()
1 代码
from urllib.parse import urljoin
# 我们可以提供一个base_url(基础链接)作为第一个参数,
# 将新的链接作为第二个参数,该方法会分析base_url的scheme、netloc和path
# 这3个内容并对新链接缺失的部分进行补充,最后返回结果。
print(urljoin('http://www.baidu.com', 'FAQ.html'))
print(urljoin('http://www.baidu.com', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html?question=2'))
print(urljoin('http://www.baidu.com?wd=abc', 'https://cuiqingcai.com/index.php'))
print(urljoin('http://www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com#comment', '?category=2'))
2 运行结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http://www.baidu.com/FAQ.html
https://cuiqingcai.com/FAQ.html
https://cuiqingcai.com/FAQ.html
https://cuiqingcai.com/FAQ.html?question=2
https://cuiqingcai.com/index.php
http://www.baidu.com?category=2#comment
www.baidu.com?category=2#comment
www.baidu.com?category=2
3 说明
如果scheme、netloc和path在新的链接里不存在,就予以补充;如果新的链接存在,就使用新的链接的部分。而base_url中的params、query和fragment是不起作用的。
五 urlencode()
1 代码
from urllib.parse import urlencode
# 声明了一个字典来将参数表示出来
params = {
'name': 'germey',
'age': 22
}
base_url = 'http://www.baidu.com?'
# urlencode将参数序列化为GET请求参数
url = base_url + urlencode(params)
print(url)
2 运行结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
http://www.baidu.com?name=germey&age=22
3 说明
有时为了更加方便地构造参数,我们会事先用字典来表示。要转化为URL的参数时,只需要调用urlencode方法即可。
六 parse_qs()
1 代码
from urllib.parse import parse_qs
query = 'name=germey&age=22'
# 我们有一串GET请求参数,利用parse_qs()方法,就可以将它转回字典
print(parse_qs(query))
2 运行结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
{'name': ['germey'], 'age': ['22']}
七 parse_qsl()
1 代码
from urllib.parse import parse_qsl
query = 'name=germey&age=22'
# 它用于将参数转化为元组组成的列表
print(parse_qsl(query))
2 运行结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
[('name', 'germey'), ('age', '22')]
3 说明
运行结果是一个列表,而列表中的每一个元素都是一个元组,元组的第一个内容是参数名,第二个内容是参数值。
八 quote()
1 代码
from urllib.parse import quote
keyword = '壁纸'
# quote将内容转化为URL编码的格式。这个方法可以将中文字符转化为URL编码
url = 'https://www.baidu.com/s?wd=' + quote(keyword)
print(url)
2 运行结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8
九 unquote()
1 代码
from urllib.parse import unquote
url = 'https://www.baidu.com/s?wd=%E5%A3%81%E7%BA%B8'
# unquote()方法,它可以进行URL解码
print(unquote(url))
2 运行结果
E:\WebSpider\venv\Scripts\python.exe E:/WebSpider/3_1_3.py
https://www.baidu.com/s?wd=壁纸